206. 反转链表
题目
- 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
法一、头插法
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
new_head = ListNode(0)#创建一个新的头节点
pre=head#定义一个指针pre指向头
while pre!=None:#当pre没到链表结尾时循环
cur=pre.next#把pre的下一个指针赋给指针cur
pre.next=new_head.next#把新的头节点的next赋给pre的next
new_head.next=pre#新的头节点的next指向pre
pre=cur#更新pre
return new_head.next#返回新的头节点的下一个
法二、迭代(改变箭头方向)
- cur:当前节点;pre:前驱节点;temp:后驱节点
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre = None#首先 pre 指针指向 Null
cur = head#cur 指针指向 head
while cur!=None:
temp = cur.next # 先把原来cur.next位置存起来
cur.next = pre#改变链表方向
pre = cur#更新pre
cur = temp#更新cur
return pre