这里写目录标题
https://leetcode.cn/problems/reverse-linked-list/
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
解法一:暴力反转
按照顺序遍历一次链表,存到列表,然后重新遍历链表,从列表末尾依次赋值
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
curr = head
chain = []
while curr :
chain.append(curr.val)
curr = curr.next
rev_curr = head
i = len(chain)-1
while rev_curr:
rev_curr.val = chain[i]
i -= 1
rev_curr = rev_curr.next
return head
解法二:修改链表指向
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre_node = None
cur_node = head
while cur_node: # 循环直到当前节点为 None
next_node = cur_node.next # 在翻转指针之前保存下一个节点
cur_node.next = pre_node # 翻转当前节点的指针
pre_node = cur_node # 前进到下一个节点
cur_node = next_node # 继续到下一个节点
return pre_node # 新的头节点是原链表的尾节点