1721. Swapping Nodes in a Linked List - Medium
前往題目
想法
- 循環一次就能找到第一個目標,以及
list
的長度加以利用
思路
寫出來了但還有我認為再更聰明一點的做法
我的解法:
- 走訪
list
找到第一個目標以及長度 - 利用長度再計算需要走多少步到目標,再次走訪
- 交換數值
更為聰明的解法:
- 走
k
步到達第一個目標 - 再一個指針
cur
從頭開始,與剛剛的第一個目標指針一起往右走訪直到最後,這時cur
指針就會在第二個目標上 - 交換
Code
class Solution {
public ListNode swapNodes(ListNode head, int k) {
ListNode first = head, sec = head, cur = head;
int len = 0;
int count = k - 1;
// Find the first and the length
while (cur != null) {
if (count == 0) first = cur;
++len;
--count;
cur = cur.next;
}
count = len - k;
cur = head;
// Find the sec node
while (cur != null) {
if (count == 0) sec = cur;
--count;
// Move the pointer
cur = cur.next;
}
// Swap
int val = first.val;
first.val = sec.val;
sec.val = val;
return head;
}
}
更聰明的解法
1721. Swapping Nodes in a Linked List - Medium
https://f88083.github.io/2024/10/15/1721-Swapping-Nodes-in-a-Linked-List-Medium/