当前位置: 首页 > 知识库问答 >
问题:

反向单链表

潘自强
2023-03-14

我有下面的程序来反转单链表中的元素。我不能让它工作。我使用了简单的变量交换技术来交换节点,但当我打印时,它不会超出第一个节点。

public static void reverseLinkedList(Node head) {
    Node current = head;
    Node temp = null;
    while (current != null && current.next != null) {
        temp = current;
        current = current.next;
        current.next = temp;
    }
}
public static void printData(Node head) {
    Node currentNode = head;
    while (true) {
        System.out.println(currentNode.data);
        if (currentNode.next != null) {
            currentNode = currentNode.next;
        } else {
            break;
        }
    }
}

共有1个答案

储俊英
2023-03-14

我更喜欢在函数之后返回head节点。使事情简单

Node reverse(Node node) 
{ 
    Node prev = null; 
    Node current = node; 
    Node next = null; 
    while (current != null) { 
        next = current.next; 
        current.next = prev; 
        prev = current; 
        current = next; 
    } 
    node = prev; 
    return node; 
} 

或者,您可以选择更简单的递归版本

Node reverse(Node head) { 
    if(head == null) { 
        return head; 
    } 

    if(head.next == null) { 
        return head; 
    } 

    Node newHeadNode = reverse(head.next); 

    head.next.next = head; 
    head.next = null; 
    return newHeadNode; 
} 
 类似资料:
  • 问题内容: 有人可以告诉我为什么我的代码有效吗?我想在Java中反转单个链接列表:这是方法(无法正常工作) 这是Node类: 在输入4-> 3-> 2-> 1上,我得到了输出4。我对其进行了调试,它正确设置了指针,但是我仍然不明白为什么它仅输出4。 问题答案: Node next = tmp.next; while(tmp != null){ 那么,当tmp == null时会发生什么呢? 不过,

  • 单向链表 结构体 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)。下面的代码可以工作,但是有没有更简单或更完善的方法? 问题答案: 编辑以删除每次迭代的额外比较:

  • 还缺少的是将最后一个节点的next赋值为NULL。 在任何世界里,像这样的东西会起作用吗?它给出了一个运行时/分段错误。