java初学者でLeetcodeで再帰の学習をしていますが、独学では理解が難しくご助言いただきたいです。
example
1Given 1->2->3->4, you should return the list as 2->1->4->3.
とあり、隣接する2つのノードを反転させる必要がありこの問題の回答が以下のようになっておりました。
java
1/** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 10 11public class Solution { 12 public ListNode swapPairs(ListNode head) { 13 if ((head == null)||(head.next == null)) 14 return head; 15 ListNode n = head.next; 16 head.next = swapPairs(head.next.next); 17 n.next = head; 18 return n; 19 } 20}
これをリストが1->2->3->4の場合でトレースすると
ListNode n = head.next;
でn=2、次に
head.next = swapPairs(head.next.next);
となっていて、この場合、head.next.nextは3->4なので
swapPairsを呼び出すとn = 4
その処理中のhead.next = swapPairs(head.next.next)ではhead.nextがnullになりheadの3が帰る
n.next = 3で、return でhead.nextに4->3が帰る
ここで初回の処理に戻り、
n.next = head = 1
ということだと思っているのですが、2->1->4->3という風に、
2->1と帰ってきた4->3が連結できる理由はhead.nextが4->3だからということでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/04 06:53