题目描述
将链表进行反转
Leetcode原题地址:https://leetcode-cn.com/problems/reverse-linked-list/
测试用例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
代码实现
其实代码的实现原理很简单,只需要按照下面几个步骤即可实现链表的反转:
- 保存上一个节点的节点信息
- 反转节点的指向,将当前节点的next指向上一个节点,比如原链表是:1->2->3,当处理2->3时,应该改为3->2。
- 继续处理后面的节点
- 迭代
class ListNode:
def __init__(self,val,next=None):
if isinstance(val,int):
self.val = val
self.next = next
elif isinstance(val,list):
self.val = val[0]
self.next = None
head = self
for i in range(1,len(val)):
node = ListNode(val[i])
head.next = node
head = head.next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
#用来记录上一个节点
prev = None
#保存当前的链表
curr = head
while curr != None:
#记录后一个节点
nex = curr.next
#改变节点的指向,反转链表
curr.next = prev
prev = curr
#继续处理后面的链表
curr = nex
return prev
l = [1,2,3,4,5]
list_node = ListNode(l)
obj = Solution()
reve_list_node = obj.reverseList(list_node)
while reve_list_node:
print(reve_list_node.val)
reve_list_node = reve_list_node.next
- 递归
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if head == None or head.next == None:
return head
#继续递归后一个节点
newHead = self.reverseList(head.next)
#反转节点
head.next.next = head
head.next = None
return newHead
参考:
1.反转链表视频讲解