YSMull
<-- algorithm



原题链接

先让快指针从 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;
    }
}