Java Program For Swapping Kth Node From Beginning With Kth Node From End In A Linked List Last Updated : 23 Dec, 2021 Comments Improve Suggest changes Like Article Like Report Given a singly linked list, swap kth node from beginning with kth node from end. Swapping of data is not allowed, only pointers should be changed. This requirement may be logical in many situations where the linked list data part is huge (For example student details line Name, RollNo, Address, ..etc). The pointers are always fixed (4 bytes for most of the compilers).Example: Input: 1 -> 2 -> 3 -> 4 -> 5, K = 2 Output: 1 -> 4 -> 3 -> 2 -> 5 Explanation: The 2nd node from 1st is 2 and 2nd node from last is 4, so swap them. Input: 1 -> 2 -> 3 -> 4 -> 5, K = 5 Output: 5 -> 2 -> 3 -> 4 -> 1 Explanation: The 5th node from 1st is 5 and 5th node from last is 1, so swap them. Illustration: Recommended: Please solve it on "PRACTICE" first, before moving on to the solution. Approach: The idea is very simple find the k th node from the start and the kth node from last is n-k+1 th node from start. Swap both the nodes. However there are some corner cases, which must be handled Y is next to XX is next to YX and Y are sameX and Y don't exist (k is more than number of nodes in linked list) Below is the implementation of the above approach. Java // A Java program to swap kth // node from the beginning with // kth node from the end class Node { int data; Node next; Node(int d) { data = d; next = null; } } class LinkedList { Node head; /* Utility function to insert a node at the beginning */ void push(int new_data) { Node new_node = new Node(new_data); new_node.next = head; head = new_node; } /* Utility function for displaying linked list */ void printList() { Node node = head; while (node != null) { System.out.print(node.data + " "); node = node.next; } System.out.println(""); } /* Utility function for calculating length of linked list */ int countNodes() { int count = 0; Node s = head; while (s != null) { count++; s = s.next; } return count; } /* Function for swapping kth nodes from both ends of linked list */ void swapKth(int k) { // Count nodes in linked list int n = countNodes(); // Check if k is valid if (n < k) return; // If x (kth node from start) and // y(kth node from end) are same if (2 * k - 1 == n) return; // Find the kth node from beginning of // linked list. We also find previous // of kth node because we need to update // next pointer of the previous. Node x = head; Node x_prev = null; for (int i = 1; i < k; i++) { x_prev = x; x = x.next; } // Similarly, find the kth node from end // and its previous. kth node from end // is (n-k+1)th node from beginning Node y = head; Node y_prev = null; for (int i = 1; i < n - k + 1; i++) { y_prev = y; y = y.next; } // If x_prev exists, then new next of it // will be y. Consider the case when y->next // is x, in this case, x_prev and y are same. // So the statement "x_prev->next = y" creates // a self loop. This self loop will be broken // when we change y->next. if (x_prev != null) x_prev.next = y; // Same thing applies to y_prev if (y_prev != null) y_prev.next = x; // Swap next pointers of x and y. These // statements also break self loop if // x->next is y or y->next is x Node temp = x.next; x.next = y.next; y.next = temp; // Change head pointers when k is 1 or n if (k == 1) head = y; if (k == n) head = x; } // Driver code public static void main(String[] args) { LinkedList llist = new LinkedList(); for (int i = 8; i >= 1; i--) llist.push(i); System.out.print( "Original linked list: "); llist.printList(); System.out.println(""); for (int i = 1; i < 9; i++) { llist.swapKth(i); System.out.println( "Modified List for k = " + i); llist.printList(); System.out.println(""); } } } Output: Original Linked List: 1 2 3 4 5 6 7 8 Modified List for k = 1 8 2 3 4 5 6 7 1 Modified List for k = 2 8 7 3 4 5 6 2 1 Modified List for k = 3 8 7 6 4 5 3 2 1 Modified List for k = 4 8 7 6 5 4 3 2 1 Modified List for k = 5 8 7 6 4 5 3 2 1 Modified List for k = 6 8 7 3 4 5 6 2 1 Modified List for k = 7 8 2 3 4 5 6 7 1 Modified List for k = 8 1 2 3 4 5 6 7 8 Complexity Analysis: Time Complexity: O(n), where n is the length of the list. One traversal of the list is needed.Auxiliary Space: O(1). No extra space is required. Please refer complete article on Swap Kth node from beginning with Kth node from end in a Linked List for more details! Comment More infoAdvertise with us Next Article Java Program For Swapping Kth Node From Beginning With Kth Node From End In A Linked List kartik Follow Improve Article Tags : Linked List Java Programs DSA Arrays Amazon Morgan Stanley Rockstand +3 More Practice Tags : AmazonMorgan StanleyRockstandArraysLinked List +1 More Similar Reads Java Program For Swapping Nodes In A Linked List Without Swapping Data Given a linked list and two keys in it, swap nodes for two given keys. Nodes should be swapped by changing links. Swapping data of nodes may be expensive in many situations when data contains many fields. It may be assumed that all keys in the linked list are distinct. Examples: Input : 10->15- 6 min read Java Program For Segregating Even And Odd Nodes In A Linked List Given a Linked List of integers, write a function to modify the linked list such that all even numbers appear before all the odd numbers in the modified linked list. Also, keep the order of even and odd numbers same.Examples: Input: 17->15->8->12->10->5->4->1->7->6->NUL 6 min read Java Program For Pairwise Swapping Elements Of A Given Linked List Given a singly linked list, write a function to swap elements pairwise. Input: 1->2->3->4->5->6->NULL Output: 2->1->4->3->6->5->NULL Input: 1->2->3->4->5->NULL Output: 2->1->4->3->5->NULL Input: 1->NULL Output: 1->NULL For examp 3 min read Java Program For Reversing Alternate K Nodes In A Singly Linked List Given a linked list, write a function to reverse every alternate k nodes (where k is an input to the function) in an efficient way. Give the complexity of your algorithm. Example: Inputs: 1->2->3->4->5->6->7->8->9->NULL and k = 3 Output: 3->2->1->4->5->6- 6 min read Java Program For Arranging Single Linked List In Alternate Odd and Even Nodes Order Given a singly linked list, rearrange the list so that even and odd nodes are alternate in the list.There are two possible forms of this rearrangement. If the first data is odd, then the second node must be even. The third node must be odd and so on. Notice that another arrangement is possible where 8 min read Java Program to Insert a New Node at the Beginning of the Circular Linked List Circular linked list: A circular linked list is a sequence of elements in which every element points to its next element in the sequence and the last element has a link to the first element. That means a circular linked list is similar to the single linked list except that the last node points to th 4 min read Java Program For Printing Nth Node From The End Of A Linked List Given a Linked List and a number n, write a function that returns the value at the n'th node from the end of the Linked List.For example, if the input is below the list and n = 3, then the output is "B". Recommended: Please solve it on "PRACTICE" first, before moving on to the solution.Method 1 (Use 5 min read Java Program For Pairwise Swapping Elements Of A Given Linked List By Changing Links Given a singly linked list, write a function to swap elements pairwise. For example, if the linked list is 1->2->3->4->5->6->7 then the function should change it to 2->1->4->3->6->5->7, and if the linked list is 1->2->3->4->5->6 then the function sh 4 min read Java Program For Inserting A Node After The N-th Node From The End Insert a node x after the nth node from the end in the given singly linked list. It is guaranteed that the list contains the nth node from the end. Also 1 <= n. Examples: Input : list: 1->3->4->5 n = 4, x = 2 Output : 1->2->3->4->5 4th node from the end is 1 and insertion has 5 min read Java Program For Deleting A Node In A Doubly Linked List Pre-requisite: Doubly Link List Set 1| Introduction and Insertion Write a function to delete a given node in a doubly-linked list. Original Doubly Linked List Recommended: Please solve it on "PRACTICE" first, before moving on to the solution. Approach: The deletion of a node in a doubly-linked list 4 min read Like