Move last element to front of a given Linked List
Last Updated :
26 Aug, 2024
Given a singly linked list. The task is to move the last node to the front in a given List.
Examples:
Input: 2->5->6->2->1
Output: 1->2->5->6->2
Explanation : Node 1 moved to front.
Input: 1->2->3->4->5
Output: 5->1->2->3->4
Explanation : Node 5 moved to front.
[Expected Approach] Traverse Till Last Node - O(n) Time and O(1) space:
Traverse the list till the last node. Use two pointers to store the reference of the last node and second last node. After the end of loop, make the second last node as the last node and the last node as the head node.
Below is the implementation of the above approach:
C++
// C++ Program to move last element
// to front in a given linked list
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node *next;
Node(int x) {
data = x;
next = nullptr;
}
};
// Function to move the last node to the
// front of the linked list
Node *moveToFront(Node *head) {
// If the list is empty or has only one node,
// no need to move
if (head == NULL || head->next == NULL) {
return head;
}
// To keep track of the second last node
Node *secLast = NULL;
// To traverse to the last node
Node *last = head;
// Traverse the list to find the last and
// second last nodes
while (last->next != NULL) {
secLast = last;
last = last->next;
}
// Change the next of second last node to NULL
secLast->next = NULL;
// Make the last node as the new head
last->next = head;
head = last;
return head;
}
void printList(Node *node) {
while (node != NULL) {
cout << node->data << " ";
node = node->next;
}
cout << endl;
}
int main() {
// Create a linked list 1->2->3->4->5
Node *head = new Node(1);
head->next = new Node(2);
head->next->next = new Node(3);
head->next->next->next = new Node(4);
head->next->next->next->next = new Node(5);
cout << "Linked list before: " << endl;
printList(head);
head = moveToFront(head);
cout << "Linked list after: " << endl;
printList(head);
return 0;
}
C
// C Program to move last element
// to front in a given linked list
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
// Function to move the last node to the front of the linked list
struct Node *moveToFront(struct Node *head) {
// If the list is empty or has only one node, no need to move
if (head == NULL || head->next == NULL) {
return head;
}
// To keep track of the second last node
struct Node *secLast = NULL;
// To traverse to the last node
struct Node *last = head;
// Traverse the list to find the last and second last nodes
while (last->next != NULL) {
secLast = last;
last = last->next;
}
// Change the next of second last node to NULL
secLast->next = NULL;
// Make the last node as the new head
last->next = head;
head = last;
return head;
}
void printList(struct Node *node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
struct Node *createNode(int data)
{
struct Node *newNode =
(struct Node *)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
int main()
{
// Create a linked list 1->2->3->4->5
struct Node *head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(5);
printf("Linked list before:\n");
printList(head);
head = moveToFront(head);
printf("Linked list after:\n");
printList(head);
return 0;
}
Java
// Java Program to move last element
// to front in a given linked list
class Node {
int data;
Node next;
Node(int x) {
data = x;
next = null;
}
}
class GfG {
// Function to move the last node to the
// front of the linked list
static Node moveToFront(Node head) {
// If the list is empty or has only one node,
// no need to move
if (head == null || head.next == null) {
return head;
}
// To keep track of the second last node
Node secLast = null;
// To traverse to the last node
Node last = head;
// Traverse the list to find the last and
// second last nodes
while (last.next != null) {
secLast = last;
last = last.next;
}
// Change the next of second last node to null
secLast.next = null;
// Make the last node as the new head
last.next = head;
head = last;
return head;
}
static void printList(Node node) {
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
System.out.println();
}
public static void main(String[] args) {
// Create a linked list 1->2->3->4->5
Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
System.out.println("Linked list before: ");
printList(head);
head = moveToFront(head);
System.out.println("Linked list after: ");
printList(head);
}
}
Python
# Python code to move the last item to front
class Node:
def __init__(self, data):
self.data = data
self.next = None
# Function to move the last node
# to the front of the linked list
def move_to_front(head):
# If the list is empty or has
# only one node, no need to move
if head is None or head.next is None:
return head
# To keep track of the second last node
sec_last = None
# To traverse to the last node
last = head
# Traverse the list to find the
# last and second last nodes
while last.next is not None:
sec_last = last
last = last.next
# Change the next of second last node to None
sec_last.next = None
# Make the last node as the new head
last.next = head
head = last
return head
def print_list(node):
while node is not None:
print(node.data, end=" ")
node = node.next
print()
# Create a linked list 1->2->3->4->5
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = Node(4)
head.next.next.next.next = Node(5)
print("Linked list before:")
print_list(head)
head = move_to_front(head)
print("Linked list after:")
print_list(head)
C#
// C# Program to move last element
// to front in a given linked list
class Node {
public int data;
public Node next;
public Node(int x) {
data = x;
next = null;
}
}
class GfG {
// Function to move the last node to the
// front of the linked list
static Node MoveToFront(Node head) {
// If the list is empty or has only one node,
// no need to move
if (head == null || head.next == null) {
return head;
}
// To keep track of the second last node
Node secLast = null;
// To traverse to the last node
Node last = head;
// Traverse the list to find the last and
// second last nodes
while (last.next != null) {
secLast = last;
last = last.next;
}
// Change the next of second last node to null
secLast.next = null;
// Make the last node as the new head
last.next = head;
head = last;
return head;
}
static void PrintList(Node node) {
while (node != null) {
System.Console.Write(node.data + " ");
node = node.next;
}
System.Console.WriteLine();
}
public static void Main() {
// Create a linked list 1->2->3->4->5
Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
System.Console.WriteLine("Linked list before:");
PrintList(head);
head = MoveToFront(head);
System.Console.WriteLine("Linked list after:");
PrintList(head);
}
}
JavaScript
// Javascript Program to move last element to
// front in a given linked list
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
// Function to move the last
// node to the front of the linked list
function moveToFront(head) {
// If the list is empty or has
// only one node, no need to move
if (head === null || head.next === null) {
return head;
}
// To keep track of the second last node
let secLast = null;
// To traverse to the last node
let last = head;
// Traverse the list to find the last
// and second last nodes
while (last.next !== null) {
secLast = last;
last = last.next;
}
// Change the next of second last node to null
secLast.next = null;
// Make the last node as the new head
last.next = head;
head = last;
return head;
}
function printList(node) {
while (node !== null) {
process.stdout.write(node.data + " ");
node = node.next;
}
console.log();
}
let head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
console.log("Linked list before:");
printList(head);
head = moveToFront(head);
console.log("Linked list after:");
printList(head);
OutputLinked list before:
1 2 3 4 5
Linked list after:
5 1 2 3 4
Time Complexity: O(n), As we need to traverse the list once.
Auxiliary Space: O(1)
Move last element to front of a given Linked List
Similar Reads
Move last element to front of a given Linked List | Set 2 Given a singly linked list and an integer K. The task is to append last K elements of the linked list to front. Examples: Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6, k = 3 Output : 4 -> 5 -> 6 -> 1 -> 2 -> 3 Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6, k = 7 Output : 6 -
9 min read
Move first element to end of a given Linked List Write a C function that moves first element to end in a given Singly Linked List. For example, if the given Linked List is 1->2->3->4->5, then the function should change the list to 2->3->4->5->1. Algorithm: Traverse the list till last node. Use two pointers: one to store the
13 min read
Move the Kth element to the Front of a Doubly Linked List Given a doubly linked list and an integer K, you need to move the Kth element to the front of the list while maintaining the order of the other elements. Examples: Input: DLL: 2 <-> 6 <-> 3 <-> 8 <-> 11 <-> 23 <-> 7 -> NULL, K = 4Output: 8 <-> 2 <->
11 min read
Move the Kth Element in a Doubly Linked List to the End Given a doubly linked list and an integer K, you need to move the Kth element to the end of the list while maintaining the order of the other elements. Examples: Input: DLL: 2 <-> 6 <-> 3 <-> 8 <-> 11 <-> 23 <-> 7 -> NULL, K = 1Output: 6 <-> 3 <-> 8
13 min read
Move all occurrences of an element to end in a linked list Given a linked list and a key in it, the task is to move all occurrences of the given key to the end of the linked list, keeping the order of all other elements the same. Examples: Input : 1 -> 2 -> 2 -> 4 -> 3 key = 2 Output : 1 -> 4 -> 3 -> 2 -> 2 Input : 6 -> 6 -> 7
15+ min read
Rearrange a linked list in to alternate first and last element Given a singly linked list L0 -> L1 -> ⦠-> Ln-1 -> Ln. Rearrange the nodes in the list so that the newly formed list is : L0 -> Ln -> L1 -> Ln-1 -> L2 -> Ln-2 ... You are required to do this in place without altering the nodes' values. Examples: Input: 1 -> 2 -> 3 -
6 min read