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
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem