2017-02-20 11 views
0
/** 
* 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; 
    } 
} 

リンクリストを逆にするには、 これは機能しますが、私は満足できません。どのように改善できますか?これは、正直言って、ループごとにスペースを取る悪い解決策のようです。これはリンクされたリストを逆転させるための悪い解決策ですか?

+5

でそれを逆にするreverse(null, headNode)を呼び出すことができる代わりに、

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

再帰を使用することができます – AxelH

+1

"ループごとにスペースを取る。" ListNodeが変更可能であれば再書き込みすることができます。 –

答えて

1

Collections.reverse(List<?>)

それはあなたがこのクラス

0

内部の他の方法を確認してください満足していない場合は、[はい、リンクリストを反転させるためにノードを作成し、追加するための最適なソリューションではありません。

http://algorithms.tutorialhorizon.com/reverse-a-linked-list/を参照してください。良い説明があります。

0

あなたは今、あなたは、これは[codereview.se]に属しているので、私は、オフトピックとして、この質問を閉じるために投票してる場所

関連する問題