1. 程式人生 > 其它 >【連結串列】1721. 交換連結串列中的節點

【連結串列】1721. 交換連結串列中的節點

技術標籤: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步,記錄下此時的節點值。

然後快慢指標同步向後走,快指標到最後,慢指標即為倒數第k個節點。
交換慢指標與之前記錄的節點值。

 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; }