Movatterモバイル変換


[0]ホーム

URL:


Open In App

Given pointer to the head node of a linked list, the task is to reverse the linked list. We need to reverse the list by changing links between nodes.

Examples: 

Input: head: 1 -> 2 -> 3 -> 4 -> NULL
Output: head: 4 -> 3 -> 2 -> 1 -> NULL
Explanation: Reversed Linked List:

Reverse-a-Linked-List-2
Reversed Linked List



Input: head: 1 -> 2 -> 3 -> 4 -> 5 -> NULL
Output: head: 5 -> 4 -> 3 -> 2 -> 1 -> NULL
Explanation: Reversed Linked List:

Reverse-a-Linked-List-4
Reversed Linked List

Input : NULL
Output : NULL

Input : 1->NULL
Output : 1->NULL

1. Iterative Method  

The idea is to reverse the links of all nodes usingthreepointers:

Starting from the first node, initializecurrwith the head of linked list andnextwith the next node of curr. Update the next pointer ofcurrwithprev. Finally, move the three pointer by updatingprevwithcurrandcurrwithnext.

Python
classNode:# Constructor to initialize the node objectdef__init__(self,data):self.data=dataself.next=NoneclassLinkedList:# Function to initialize headdef__init__(self):self.head=None# Function to reverse the linked listdefreverse(self):prev=Nonecurrent=self.headwhile(currentisnotNone):next=current.nextcurrent.next=prevprev=currentcurrent=nextself.head=prev# Function to insert a new node at the beginningdefpush(self,new_data):new_node=Node(new_data)new_node.next=self.headself.head=new_node# Utility function to print the LinkedListdefprintList(self):temp=self.headwhile(temp):print(temp.data,end=" ")temp=temp.next# Driver program to test above functionsllist=LinkedList()llist.push(20)llist.push(4)llist.push(15)llist.push(85)print("Given Linked List")llist.printList()llist.reverse()print("\nReversed Linked List")llist.printList()

Output
Given Linked List85 15 4 20 Reversed Linked List20 4 15 85
  • Time Complexity: O(N)
  • Auxiliary Space: O(1)

2. A Simpler and Tail Recursive Method 

The idea is to reach the last node of the linked list usingrecursion then start reversing the linked list from the last node.

Python
classNode:# Constructor to initialize the node objectdef__init__(self,data):self.data=dataself.next=NoneclassLinkedList:# Function to initialize headdef__init__(self):self.head=NonedefreverseUtil(self,curr,prev):# If last node mark it headifcurr.nextisNone:self.head=curr# Update next to prev nodecurr.next=prevreturn# Save curr.next node for recursive callnext=curr.next# And update nextcurr.next=prevself.reverseUtil(next,curr)# This function mainly calls reverseUtil()# with previous as Nonedefreverse(self):ifself.headisNone:returnself.reverseUtil(self.head,None)# Function to insert a new node at the beginningdefpush(self,new_data):new_node=Node(new_data)new_node.next=self.headself.head=new_node# Utility function to print the LinkedListdefprintList(self):temp=self.headwhile(temp):print(temp.data,end=" ")temp=temp.next# Driver programllist=LinkedList()llist.push(8)llist.push(7)llist.push(6)llist.push(5)llist.push(4)llist.push(3)llist.push(2)llist.push(1)print("Given linked list")llist.printList()llist.reverse()print("\nReverse linked list")llist.printList()

Output
Given linked list1 2 3 4 5 6 7 8 Reverse linked list8 7 6 5 4 3 2 1
  • Time Complexity: O(N)
  • Auxiliary Space:O(1)

Please referReverse a linked list for more details!


Improve

Explore

Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences

[8]ページ先頭

©2009-2025 Movatter.jp