2021/04/26
先让快指针从 head 走 k-1 次,此时找到了正数第 k 个结点。
然后让慢指针也从 head 开始跟快指针一起走,直到快指针指向链表的最后一个结点,此时慢指针是倒数第 k 个结点。
这道题,题目只要求交换结点的值,所以就不做链表的操作了。
class Solution {
public ListNode swapNodes(ListNode head, int k) {
ListNode p = head;
int m = 0;
while (m < k - 1) {
p = p.next;
m += 1;
}
// 此时 p 是正数第 k 个数
ListNode k1 = p;
// 寻找倒数第 k 个数
ListNode k2 = head;
while (p.next != null) {
p = p.next;
k2 = k2.next;
}
int temp = k1.val;
k1.val = k2.val;
k2.val = temp;
return head;
}
}