Swapping Nodes in a Linked List

medium linked list two pointers

Problem

Given the head of a linked list and an integer k, swap the values of the kth node from the front and the kth node from the end.

Inputhead = [1,2,3,4,5], k = 2
Output[1,4,3,2,5]
Front-kth = 2, end-kth = 4.

def swap_nodes(head, k):
    a = head
    for _ in range(k - 1):
        a = a.next
    front = a
    b = head
    while a.next:
        a = a.next; b = b.next
    front.val, b.val = b.val, front.val
    return head
function swapNodes(head, k) {
  let a = head;
  for (let i = 1; i < k; i++) a = a.next;
  const front = a;
  let b = head;
  while (a.next) { a = a.next; b = b.next; }
  [front.val, b.val] = [b.val, front.val];
  return head;
}
class Solution {
    public ListNode swapNodes(ListNode head, int k) {
        ListNode a = head;
        for (int i = 1; i < k; i++) a = a.next;
        ListNode front = a, b = head;
        while (a.next != null) { a = a.next; b = b.next; }
        int t = front.val; front.val = b.val; b.val = t;
        return head;
    }
}
ListNode* swapNodes(ListNode* head, int k) {
    ListNode* a = head;
    for (int i = 1; i < k; i++) a = a->next;
    ListNode* front = a;
    ListNode* b = head;
    while (a->next) { a = a->next; b = b->next; }
    swap(front->val, b->val);
    return head;
}
Time: O(n) Space: O(1)