Skip to content

Latest commit

 

History

History
67 lines (54 loc) · 2.32 KB

File metadata and controls

67 lines (54 loc) · 2.32 KB

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;
    }
};