【連結串列】1721. 交換連結串列中的節點
阿新 • • 發佈:2021-01-27
技術標籤:LeetCode
題目
1721. 交換連結串列中的節點
給你連結串列的頭節點 head 和一個整數 k 。
交換 連結串列正數第 k 個節點和倒數第 k 個節點的值後,返回連結串列的頭節點(連結串列 從 1 開始索引)。
示例 1:
輸入:head = [1,2,3,4,5], k = 2
輸出:[1,4,3,2,5]
示例 2:
輸入:head = [7,9,6,6,7,8,3,0,9,5], k = 5
輸出:[7,9,6,6,8,7,3,0,9,5]
示例 3:
輸入:head = [1], k = 1
輸出:[1]
解法
快慢指標法
快指標先走k-1步,記錄下此時的節點值。
交換慢指標與之前記錄的節點值。
public ListNode swapNodes(ListNode head, int k) {
ListNode fast = head;
ListNode slow = head;
for (int i = 0; i < k - 1; i++) {
fast = fast.next;
}
ListNode first = fast;
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
int temp = first.val;
first.val = slow.val;
slow.val = temp;
return head;
}