老师,还是那个问题

来源:8-8 回溯法是经典人工智能的基础 N Queens

大神带D

2019-03-28


http://img.mukewang.com/szimg/5c9c33a60001d44205160960.jpg

http://img.mukewang.com/szimg/5c9c33ac00016c7807200960.jpg单链表的逆置,头插法

写回答

1回答

liuyubobobo

2019-03-28

我先明确一下你的问题。你的问题是不是:以下两句话,具体指针的变动是怎样的?

L->next = NULL;
p->next = L->next;


如果不是,能否再具体描述一下?


==========


我看了一遍,这个代码整体是有Bug的,是不对的。


关于链表反转这个问题,我全是Leetcode的206号问题。

英文版传送门:https://leetcode.com/problems/reverse-linked-list/

中文版传送门:https://leetcode-cn.com/problems/reverse-linked-list/


对于你截图的这个思路,建议参考我的代码,看看是否能理解:传送门:https://github.com/liuyubobobo/Play-Leetcode/blob/master/0206-Reverse-Linked-List/cpp-0206/main.cpp


核心代码(C++):

class Solution {
public:
    ListNode* reverseList(ListNode* L) {
        ListNode* p, *r;
        p = L->next;
        L->next = NULL;
        while(p != NULL){
            r = p->next;
            p->next = L->next;
            L->next = p;
            p = r;
        }
        return L->next;
    }
};

其中,cur是当前的节点,pre是当前节点的前一个节点,next是当前节点的下一个节点。循环里做的事情,是不断地把cur的next指向pre,同时cur向前移动(相应的pre也要向前移动)


看看能否理解?是否还有问题?


继续加油!:)

0
2
liuyubobobo
回复
大神带D
嗯,我看了一遍截图书上的代码,这本书上的代码确实是不对的。我已经在原答案上进行了补充,建议参考我的代码,看看你能否理解?继续加油!:)
2019-03-28
共2条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程