因为之前对链表反转这一块一直**不清,现在复习总结一下,只要还是要了解复习指针地址操作,结构体定义。
方法1:采用前插得方法,把节点从前边取出来然后再插到前边;分三步(具体看分解图)
<一>先将第一个数字节点和头断开,然后接到链表最后
<二>然后按照上边的方法把剩下的链表中的节点一个接一个的插到前边
<三>直到将所有的节点插完,然后将新的头结点和head相连
先上完整的反转代码。。链表中存入了15个数

- void fanxu(list *plist)
- {
- //标记首先需要的三个节点
- list *pwei=plist;
- list *per=plist->pnext;
- list *ptemp=NULL;
- while(pwei->pnext!=NULL)
- {
- pwei=pwei->pnext;
- }
- while(pwei!=per)
- {
- ptemp=per; //永远标记第二个节点
- per=per->pnext;
- //第一次要把链表头断掉
- if(pwei->pnext==NULL)
- {
- pwei->pnext=ptemp;
- ptemp->pnext=NULL; //断掉
- }
- else
- {
- ptemp->pnext=pwei->pnext; //前插
- pwei->pnext=ptemp; //然后再一块接到尾指针
- }
- plist->pnext=per; //为了打印显示,可以省
- printf("per-jietou--****************************************************************************************\n");
- showlist(plist);
- plist->pnext=pwei; //为了打印显示,可以省
- printf("pwei-jietou--***************************************************************************************\n");
- showlist(plist);
- printf("\n\n\n");
- }
- plist->pnext=per;
- }

第一步:<一>先将第一个数字节点和头断开,然后接到链表最后

第二步:<二>然后按照上边的方法把剩下的链表中的节点一个接一个的插到前边

………
第三步: <三>直到将所有的节点插完,然后将新的头结点和head相连

########################################################################################
方法2:在方法1的基础上改进简化(创建新标志位) 主要理解while(p)是判断节点p的地址,p=q 是地址之间的重新赋值
<一>定义三个新的节点标志位p q pr 将链表的前一个节点插下来;
<二> 然后将节点插到一个新的标志位后边,同样的方法插后边的节点
<三>插完之后将新的标志位连接到之前的头结点打印
****************************************************************************************************************

- void fanxu_gao(list *plist)
- {
- list *pr;
- list *p=plist->pnext;
- list *q=NULL;
- plist->pnext =NULL;
- while(p)
- {
- pr=p->pnext; //记录第二个地址
- p->pnext=q;
- q=p; //可以理解成给q和p重新赋值新地址
- p=pr; //标记第二个地址
- plist->pnext=q; //打印显示,可以没有
- printf("qqqqqqqqqqqqqqqqqg#############################################\n");
- showlist(plist);
- plist->pnext=p; // 打印显示可以没有
- printf("ppppppppppppppppppppz#############################################\n");
- showlist(plist);
- printf("\n\n\n");
- }
- plist->pnext=q;
- }

************************************************************************************************************************
<一>定义三个新的节点标志位p q pr 将链表的前一个节点插下来;

<二> 然后将节点插到一个新的标志位后边,同样的方法插后边的节点

<三>插完之后将新的标志位连接到之前的头结点打印

***************************************************************************************************************************
最后在给大家分享些关于链表的资料可以进一步参考
单链表
makeru.com.cn/live/5413_1924.html?s=45051
C语言玩转链表
makeru.com.cn/live/1392_338.html?s=45051
指针
makeru.com.cn/live/1392_238.html?s=45051
|