Swap Kth node from beginning with Kth node from end in a Linked List
MediumUpdated: Aug 2, 2025
Practice on:
Problem
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).
OR
Given a Linked List and a number k, Swap Kth Node from the front with the Kth Node from the End
Examples
Example 1:
--- title: Input List and k = 2 --- graph LR A1[1] --> B2[2]:::kth_node --> C3[3] --> D4[4] --> E5[5] classDef kth_node fill:#1E90FF,stroke:#000,stroke-width:2px;
--- title: Output List --- graph LR A1[1] --> D4[4]:::kth_node --> C3[3] --> B2[2]:::kth_node --> E5[5] classDef kth_node fill:#1E90FF,stroke:#000,stroke-width:2px;
Input: head = [1,2,3,4,5], k = 2
Output: [1,4,3,2,5]
Example 2:
--- title: Input List and k = 5 --- graph LR A7[7] --> B9[9] --> C6[6] --> D6[6] --> E7[7]:::kth_node --> F8[8] --> G3[3] --> H0[0] --> I9[9] --> J5[5] classDef kth_node fill:#1E90FF,stroke:#000,stroke-width:2px;
--- title: Output List --- graph LR A7[7] --> B9[9] --> C6[6] --> D6[6] --> F8[8]:::kth_node --> E7[7]:::kth_node --> G3[3] --> H0[0] --> I9[9] --> J5[5] classDef kth_node fill:#1E90FF,stroke:#000,stroke-width:2px;
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]
Solution
Method 1 - Find the length of list
- Determine Length of the List: Traverse the list to determine its total length
n. - Identify k-th Nodes:
- The
k-th node from the beginning is straightforward. - The
k-th node from the end is the(n - k + 1)-th node from the beginning.
- The
- Swap Values: Swap the values of the identified nodes.
- Return the Modified List: Return the head of the modified linked list.
Code
Java
class Solution {
public ListNode swapNodes(ListNode head, int k) {
// Step 1: Determine the length of the list
int length = 0;
ListNode current = head;
while (current != null) {
length++;
current = current.next;
}
// Step 2: Identify the kth node from the beginning and the end
ListNode kthFromBeg = head;
for (int i = 0; i < k - 1; i++) {
kthFromBeg = kthFromBeg.next;
}
ListNode kthFromEnd = head;
for (int i = 0; i < length - k; i++) {
kthFromEnd = kthFromEnd.next;
}
// Step 3: Swap the values of the kth node from the beginning and the
// end
int temp = kthFromBeg.val;
kthFromBeg.val = kthFromEnd.val;
kthFromEnd.val = temp;
// Step 4: Return the head of the modified list
return head;
}
}
Python
class Solution:
def swapNodes(self, head: ListNode, k: int) -> ListNode:
# Step 1: Determine the length of the list
length = 0
current = head
while current:
length += 1
current = current.next
# Step 2: Identify the kth node from the beginning and the end
kth_from_beg = head
for _ in range(k - 1):
kth_from_beg = kth_from_beg.next
kth_from_end = head
for _ in range(length - k):
kth_from_end = kth_from_end.next
# Step 3: Swap the values of the kth node from the beginning and the end
kth_from_beg.val, kth_from_end.val = kth_from_end.val, kth_from_beg.val
# Step 4: Return the head of the modified list
return head
Complexity
- ⏰ Time complexity:
O(n), wherenis the length of the linked list. We traverse the list multiple times, but each traversal is linear with respect to the number of nodes. - 🧺 Space complexity:
O(1), as we are using a constant amount of extra space for pointers and variables.