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
Related Topics:
Linked List
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 len = 0;
for (; head; head = head->next) ++len;
return len;
}
public:
ListNode* swapNodes(ListNode* head, int k) {
int len = getLength(head), r = len - k + 1;
if (r == k) return head;
if (r < k) swap(r, k);
auto p = head, q = head;
while (--k) p = p->next;
while (--r) q = q->next;
swap(p->val, q->val);
return head;
}
};