反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
分析如下:
单链表为空或者只有一个节点的时候都只需要直接返回。
当有一个以上的节点的时候,此时我们需要定义3个指针来完成链表的迭代反转,为什么要3个指针呢?
我们知道完成两个元素的交换需要一个临时变量来作为交换容器,很显然链表的反转就是地址的交换,
在进行链表反转的时候,我们需要一个变量来存储下一个节点位置,否则当进行交换之后,链表的指向发生改变,就丢失了下一个节点的地址;
下图以三个节点为例;
代码如下:
struct ListNode* reverseList(struct ListNode* head){
if(head==NULL||head->next==NULL)//为空或者只有1个
return head;
struct ListNode *prev=NULL, *cur=head, *next=head->next;
while(cur!=NULL)
{
cur->next=prev;//进行反转
//进行迭代移动
prev=cur;
cur=next;
if(next)//注意边界
next=next->next;
}
return prev;
}