単独リンクリストを逆にします。
例:
入力: 1-> 2-> 3-> 4-> 5-> NULLの 出力: 5-> 4-> 3-> 2-> 1-> NULL
問題解決のアイデア:
アイデアのための公式サイト、よく理解
行うには再帰を使用して、
キーは逆に働くことです。リストの残りの部分が反転したと仮定すると、今どのように私は一部の前でそれを逆にしますか?
仮定のリストです:
nmのノードn(K + 1)が反転した場合、我々は、NKである間。
だから、NK .next.next = nkの。
次の必見ポイントØn1のことに注意してください。あなたはこれを無視した場合、あなたのリストには、サイクルで生成することができます。あなたは、テストコードサイズ2としてリストを使用する場合は、このエラーをキャッチすることがあります。
コード:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
}