题解 | #反转链表# C++ by meng

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

通过两个链表做中间量存储结果

设链表pre和nex为nullptr
假设原链表为 head 1->2->3->nullprt

1.用链表nex 存 tmp下一项的值 ,留作下一轮用

pre = head->next; //那么pre = 2->3->nullptr

2.用链表pre为tmp->next赋值

head->next = pre; //那么此时head = 1->nullptr

3.再将head赋值给pre

pre = head; //此时pre = 1->nullptr

4.最后将nex还给tmp,使得tmp层层递进

head = nex; //head等于原head->next的链表 head = 2->3->nullptr

每轮tmp pre after的输入值输出值

轮数 pre tmp after
1 in null 1->2->3->null null
1 out 2->3->null 2->3->null 1->null
- - - -
2 in 2->3->null 2->3->null 1->null
2 out 3->null 3->null 2->1->null
- - - -
3 in 3-null 3-null 2-1-null
3 out null null 3->2->null

由此可以看出nex保存head每次的next项,最终还给head最递进
真正的操作是head->next = pre;即,将先出的值往链表后面放。
每次(如第2轮)把2->[3->null] 换成1->null,得到2->1->null;此时该值还存在head中,需要再nex还给head前(即第四步之前)把head赋给pre做保存。


最终代码体现

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        ListNode *pre = nullptr;
        ListNode *nex = nullptr;
        while(pHead!=nullptr){
            nex  = pHead->next; //res 2-3-null | 3-null
            pHead->next = pre; //pHead 1-null
            pre = pHead; //2-3-null
            pHead = nex; // 1-null
        }
        return pre;
    }
};
全部评论

相关推荐

09-15 15:53
Java
Elastic90:我看到的是东软的人在耐心回应,而那位实习生跟在发疯似的
投递东软集团等公司10个岗位
点赞 评论 收藏
分享
10-17 17:54
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务