【发布时间】:2017-05-22 19:16:51
【问题描述】:
我的反向链表函数似乎有问题,但即使在网上寻找解决方案后,我也无法理解为什么我的方法在三个节点的空运行中失败:( 在其他解决方案中,加星标的部分通常写为“head.next.next = head”。我的 'n.next = head' 行不是在做同样的事情吗?
另外一些解决方案在调用方法之前有一行:
Node secondElem = head.next;
head.next = NULL;
我也不明白为什么需要这样做:(
我想出了这个解决方案,但似乎无法从这里开始:
Node reverseLL(Node head){
if (head == NULL || head.next == NULL) return head;
Node n = reverseLL(head.next);
n.next = head; //**
head.next = NULL
return n;
}
有人可以向我解释一下吗?
【问题讨论】:
-
在返回 n 之前需要做 n = n.next。在解决算法问题之前,你应该总是拿纸和笔,在你编码之后,你应该运行你的代码。
-
或者只返回头部而不是n
-
正确!但在这种情况下,最后我有一个反向的linkedList 和一个指向linkedList 尾部的头部。所以我的linkedList没有任何trational Head?即我对于 head=>1 => 2 =>3 => Null,我会在反向 3 => 2 => 1 => Null 之后,现在 head 指向节点 1!
标签: data-structures linked-list