JZ15 反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路
反转链表不像数组,数组有索引值,但是链表只有前后连接的指针,所以比较复杂,需要对每一条指针进行修改;不能直接把指向后面的指针指向前面(这样后面的结点就都丢了),需要先把后面的节点进行保存,同时也需要将前面的指针进行保存。
设置三个指针,一个保存后面的节点,一个保存前面的节点
pre,p,post
每一次都令:
post=p->next; 保存后面的节点
p->next=pre; 令当前的指针指向前面的节点
pre=p; 依次当前节点变为前一个节点
p=post; 后一个节点变为当前节点

代码
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* pre=NULL;
ListNode* p=pHead;
ListNode* post=pHead;
while(p!=NULL)
{
post=p->next;
p->next=pre;
pre=p;
p=post;
}
return pre;
}
};