1721. Swapping Nodes in a Linked List

You are given the head of a linked list, and an integer k.

Return the head of the linked list after swapping the values of the kth node from the beginning and the kth node from the end (the list is 1-indexed).

 

Example 1:

Input: head = [1,2,3,4,5], k = 2
Output: [1,4,3,2,5]

Example 2:

Input: head = [7,9,6,6,7,8,3,0,9,5], k = 5
Output: [7,9,6,6,8,7,3,0,9,5]

Example 3:

Input: head = [1], k = 1
Output: [1]

Example 4:

Input: head = [1,2], k = 1
Output: [2,1]

Example 5:

Input: head = [1,2,3], k = 2
Output: [1,2,3]

 

Constraints:

  • The number of nodes in the list is n.
  • 1 <= k <= n <= 105
  • 0 <= Node.val <= 100
class Solution {
    public ListNode swapNodes(ListNode head, int k) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode p = dummy, q = dummy;
        for(int i = 0; i < k; i++) p = p.next;
        while(p.next != null) {
            p = p.next;
            q = q.next;
        }
        p = dummy;
        for(int i = 0; i < k - 1; i++) p = p.next;
        int tmp = p.next.val;
        p.next.val = q.next.val;
        q.next.val = tmp;
        return dummy.next;
    }
}

和remove kth node from end of linked list一样,先把右边的kth node找到,然后找到左边的kthnode,交换value(没办法)即可。

posted @ 2021-03-15 03:51  Schwifty  阅读(46)  评论(0编辑  收藏  举报