【问题标题】:Reverse singly linked list - Code improvement反向单链表——代码改进
【发布时间】:2013-06-18 14:36:07
【问题描述】:

我正在努力提高我的递归技能(或者可能是第一次获得它们 :))。为此,我写了一段Java代码来反转一个单链表,如下:

node head, prev; // head is pointing to the start of the linked list

void reverselist(node current) {
    if (current.next != null) {
        reverselist(current.next);
    }
    if (current.next == null) {
        this.head = current;
        prev = current;
    }
    else {
        prev.next = current;
        current.next = null;
        prev = current;
    }
}

这段代码运行良好,但为了学习,我想避免在递归函数内部使用全局变量(node prev)进行操作。那么这个函数是否可以重写来完全避免呢?欢迎任何其他优化:)

【问题讨论】:

  • 这是CodeReview的更多问题。
  • 我的所有链表中都有一个指向 firstNode 的私有成员,也许这对你也有用。

标签: java recursion linked-list


【解决方案1】:

一个更好的实现应该如下:

public Node reverse(Node current)
{
 if (current== null || current.next==null) return current;
 Node nextItem = current.next;
 current.next = null;
 Node reverseRest = reverse(nextItem);
 nextItem.next = current;
 return reverseRest;
}

【讨论】:

    【解决方案2】:
    public Linkedlist reverseList (LinkedList list) {
    
        Node temp = null;
        Node nextNode = list;
        while(list != null) {
            nextNode = list.next;
            list.next = temp;
            temp = list;
            list = nextNode;
        }
        return temp;
    }
    
    private class LinkedList {
    
        int data;
        LinkedList next;
    }
    

    【讨论】:

    • 请尝试在您在回答中添加的帖子中添加 cmets / 解释...这将有助于其他人快速理解。
    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2012-11-19
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多