# 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: Optional[ListNode], k: int) -> Optional[ListNode]:
        right_pointer = head
        for _ in range(1, k):
            right_pointer = right_pointer.next
        left_kth_node = right_pointer

        left_pointer = head
        while right_pointer is not None:
            right_kth_node = left_pointer
            right_pointer = right_pointer.next
            left_pointer = left_pointer.next

        left_kth_node.val, right_kth_node.val = right_kth_node.val, left_kth_node.val
        return head