迭代
思路
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
中间变量temp存放原链表的next地址
(1)、old_head:1->2->3->4->5->NULL
new_head:1->None
(2)、old_head:2->3->4->5->NULL
new_head:2->1->None
(3)、old_head:3->4->5->NULL
new_head:3->2->1->None
(4)、old_head:4->5->NULL
new_head:4->3->2->1->None
(5)、old_head:5->NULL
new_head:5->4->3->2->1->None
代码
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
new_head = None
while head:
temp=head.next #备份原链表的next地址
head.next=new_head #设置new_head的next地址
new_head=head #设置新链表head
head=temp
return new_head
递归
思路
链表是经典的递归定义的数据结构,链表相关的题目常常考察递归,翻转链表是其中的经典题目。
1.得到尾部节点:nextNode= self.reverseList(head.next)
2.翻转当前节点:head.next.next = head
3.拆掉当前节点的next:head.next = None
代码
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
'''
递归的条件:
head.next == None说明到尾部了。
head == None, 是为了处理特殊情况:输入空列表,直接返回
'''
if not head or not head.next:
print(head)
return head
nextNode = self.reverseList(head.next)
# 交换当前head 和 head.next:通过head.next获取next地址,然后再设置next地址为head以实现交换
head.next.next = head
head.next = None
return nextNode