[程式設計題] lc 24 兩兩交換連結串列中的節點
阿新 • • 發佈:2020-07-19
[程式設計題] lc:24. 兩兩交換連結串列中的節點
題目描述
輸入輸出例子
思路
參考:https://www.bilibili.com/video/BV1VC4y1s75E?from=search&seid=7587439253853836582
先構造一個dummy節點,指向和連線這個連結串列。再使用這三個指標進行。
while的退出條件對於奇數偶數的連結串列都是:
pre.next!=null && pre.next.next!=null (y也就是說,當pre.next的指向和pre.next.next的指向都不能懸空才指向while迴圈。)
方法1:三個指標
時間複雜度:O(n) 空間複雜度:O(n)
Java程式碼
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode swapPairs(ListNode head) { //1 先構造一個dummy節點,並連線成連結串列 ListNode dummy = new ListNode(-1); ListNode pre = dummy; pre.next = head; //2 迴圈解決 while(pre.next!=null && pre.next.next!=null){ ListNode cur = pre.next; ListNode next = pre.next.next; //三個指向關係 pre.next = cur.next; cur.next = next.next; next.next = cur; //pre指標往前移動 pre = pre.next.next; } //返回資訊 return dummy.next; } }
輸出: