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; } };