有人可以告诉我为什么我的代码有效吗?我想在Java中反转单个链接列表:这是方法(无法正常工作)
public void reverseList(){
Node before = null;
Node tmp = head;
Node next = tmp.next;
while(tmp != null){
if(next == null)
return;
tmp.next = before;
before = tmp;
tmp = next;
next = next.next;
}
}
这是Node类:
public class Node{
public int data;
public Node next;
public Node(int data, Node next){
this.data = data;
this.next = next;
}
}
在输入4-> 3-> 2-> 1上,我得到了输出4。我对其进行了调试,它正确设置了指针,但是我仍然不明白为什么它仅输出4。
Node next = tmp.next;
while(tmp != null){
那么,当tmp == null时会发生什么呢?
不过,您几乎明白了。
Node before = null;
Node tmp = head;
while (tmp != null) {
Node next = tmp.next;
tmp.next = before;
before = tmp;
tmp = next;
}
head = before;
或者用更好的(?)命名:
Node reversedPart = null;
Node current = head;
while (current != null) {
Node next = current.next;
current.next = reversedPart;
reversedPart = current;
current = next;
}
head = reversedPart;
ASCII文字:
<__<__<__ __ : reversedPart : head
(__)__ __ __
head : current: > > >
我有下面的程序来反转单链表中的元素。我不能让它工作。我使用了简单的变量交换技术来交换节点,但当我打印时,它不会超出第一个节点。
我试图打印一个双链接列表,从tail元素开始,以first元素结束。我下面的代码就是这样做的,但出于某种原因,我也返回了被删除的项目。当我从头到尾打印列表时,它不会这样做。Idk,如果是toString导致了这个或dequed方法。我把两者都包括在内。
单向链表 结构体 struct rt_slist_node 单向链表节点 更多... 宏定义 #define rt_slist_entry(node, type, member) rt_container_of(node, type, member) 获取单向链表节点的数据结构 #define rt_slist_for_each(pos, head) for (po
问题:给定一个排序的链表 更改链接列表中的指针以使其 使用恒定空间。 我试图用以下算法来解决它: > 使用两个节点(快速节点和慢速节点)查找链接列表的中间节点 从中间节点反转链接列表。将中间节点标记为y,将起始节点标记为x。 如果y=中间节点,y!=x、 下一步,然后交换y和x。然后交换x和x。 x前进两个节点,y前进一个节点。 现在如果(x!=y){swap x和y} x前进两个节点,y前进一个
问题内容: 必须是O(n)并且是就地(空间复杂度为1)。下面的代码可以工作,但是有没有更简单或更完善的方法? 问题答案: 编辑以删除每次迭代的额外比较: