0

我正在尝试提高我的递归技能(或者可能是第一次获得它们:))。为此,我编写了一段 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;
    }
}

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

4

2 回答 2

2

更好的实现应该如下:

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;
}
于 2013-06-18T14:42:06.173 回答
0
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;
}
于 2014-05-01T19:19:30.023 回答