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 <= 1050 <= Node.val <= 100
Related Topics:
Linked List, Two Pointers
Similar Questions:
- Remove Nth Node From End of List (Medium)
- Swap Nodes in Pairs (Medium)
- Reverse Nodes in k-Group (Hard)
// 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;
}
};