当前位置: 首页 > 面试题库 >

反向单链列表Java

松德曜
2023-03-14
问题内容

有人可以告诉我为什么我的代码有效吗?我想在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)。下面的代码可以工作,但是有没有更简单或更完善的方法? 问题答案: 编辑以删除每次迭代的额外比较: