LeetCode筆記——兩兩交換表中的節點
題目:
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
示例:
給定1->2->3->4
, 你應該返回2->1->4->3
.
說明:
- 你的演算法只能使用常數的額外空間。
- 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
思路:連結串列和指標在一起就更暈了。。。。直接百度了大神們的程式碼,先看懂程式碼。
程式碼:
class Solution { public ListNode swapPairs(ListNode head) { if(head == null || head.next == null)return head; ListNode dummy = new ListNode(0); //在頭結點之前再放一個節點,注意寫法 ListNode l = head.next; //儲存交換之後的頭結點 dummy.next = head; while(dummy.next != null && dummy.next.next != null){ ListNode first = dummy.next; ListNode second = dummy.next.next; first.next = second.next; //交換的時候使用三個節點交換 second.next = first; dummy.next = second; dummy = dummy.next.next; } return l;//在這裡如果返回head 的話會少了交換後的頭結點 } }
執行時間最短的程式碼:
還是,嗯。。。。看不懂。。。好繞。。。。
class Solution { public ListNode swapPairs(ListNode head) { if (head == null) { return null; } else if (head.next == null) { return head; } else { ListNode result = head.next; ListNode tmp = head.next.next; head.next.next = head; head.next = swapPairs(tmp); return result; } } }