Skip to content

Latest commit

 

History

History

1721

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

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]

 

Constraints:

  • The number of nodes in the list is n.
  • 1 <= k <= n <= 105
  • 0 <= Node.val <= 100

Companies:
Facebook, Amazon

Related Topics:
Linked List, Two Pointers

Similar Questions:

Solution 1.

// OJ: https://leetcode.com/problems/swapping-nodes-in-a-linked-list/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
    int getLength(ListNode *head) {
        int ans = 0;
        for (; head; head = head->next) ++ans;
        return ans;
    }
    ListNode *getNode(ListNode *head, int k) {
        while (--k) head = head->next;
        return head;
    }
public:
    ListNode* swapNodes(ListNode* head, int k) {
        int len = getLength(head), r = len - k + 1;
        if (r == k) return head;
        ListNode *a = getNode(head, k), *b = getNode(head, r);
        swap(a->val, b->val);
        return head;
    }
};