这是扭转链表的糟糕解决方案吗?

时间:2017-02-20 08:51:35

标签: java algorithm linked-list

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * } 
 */


public class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null){
            return head;
        }
       ListNode temp = new ListNode(head.val);
       head = head.next;
       while(head != null){
           ListNode nxt = new ListNode(head.val);
           nxt.next = temp; 
           temp = nxt;
           head = head.next;
       }
       return temp;
    }
}

要撤消链接列表, 这有效,但我不满意,我怎么能做得更好?说实话,这似乎是一个糟糕的解决方案,每个循环占用空间。

3 个答案:

答案 0 :(得分:1)

Collections.reverse(List<?>)

如果不满意,请查看本课程中的其他方法

答案 1 :(得分:0)

是的,它不是创建和附加节点以反转链接列表的最佳解决方案。

请参阅http://algorithms.tutorialhorizon.com/reverse-a-linked-list/。有很好的解释。

答案 2 :(得分:0)

您可以使用递归

    public void reverse(ListNode prev, ListNode currNode) {
        if (currNode == null) {
            return;
        } else {
            reverse(currNode, currNode.next);
            currNode.next = prev;
        }
    }

现在,您可以致电reverse(null, headNode)将其撤消