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
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapNodes(self, head: ListNode, k: int) -> ListNode:
fast = head
for _ in range(k - 1):
fast = fast.next
p = fast
slow = head
while fast.next:
slow, fast = slow.next, fast.next
q = slow
p.val, q.val = q.val, p.val
return head
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapNodes(ListNode head, int k) {
ListNode fast = head;
while (--k > 0) {
fast = fast.next;
}
ListNode p = fast;
ListNode slow = head;
while (fast.next != null) {
slow = slow.next;
fast = fast.next;
}
ListNode q = slow;
int t = p.val;
p.val = q.val;
q.val = t;
return head;
}
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* swapNodes(ListNode* head, int k) {
ListNode* p1 = head;
for (int i = 1; i < k; i++)
p1 = p1->next;
ListNode *slow = head, *fast = p1->next;
while (fast) {
fast = fast->next;
slow = slow->next;
}
swap(slow->val, p1->val);
return head;
}
};
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapNodes(head *ListNode, k int) *ListNode {
fast := head
for k > 1 {
fast = fast.Next
k--
}
p := fast
slow := head
for fast.Next != nil {
slow, fast = slow.Next, fast.Next
}
q := slow
p.Val, q.Val = q.Val, p.Val
return head
}
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function swapNodes(head: ListNode | null, k: number): ListNode | null {
let fast = head;
while (--k) {
fast = fast.next;
}
let p = fast;
let slow = head;
while (fast.next) {
slow = slow.next;
fast = fast.next;
}
let q = slow;
[p.val, q.val] = [q.val, p.val];
return head;
}