1.迭代的方法实现链表逆序
链表的结点:
typedef struct node{ int idata; struct node * pNext;}Node;
假设链表有a,b,c,d四个节点,3个Node*类型的指针变量:pre、current、next.
①初始状态:
首先从A节点开始逆序,current指针指向第一个节点,pre指针指向NULL,next指针指向b节点。
②把a节点从原链表中解脱出来
将A节点的next指针指向prev,因为prev的当前值是NULL,所以A节点就从链表中脱离出来了,然后移动pre和current指针,使它们分别指向a节点和a的下一个节点b
现在来总结一下,循环的初始条件是:
prev = NULL;
current指针指向第一个节点
循环迭代体是:
while (NULL != current){next = current->pNext; current->pNext = pre; //构建新的链表,pre初始值为NULL,故为新链表的最后一个节点pre = current; //移动pre指针,指向原链表的下一个节点current = next;//移动current指针,指向原链表的下一个节点 }
循环终止条件是:
current == NULL
此时pre指针指向链表最后一个节点,新链表的head指针的值应该指向原链表的最后一个节点。