题目描述
给定一个单链表的头结点head,反转该链表后,返回新链表的表头。
示例
输入:head = [1,2,3]
输出:[3,2,1]
回顾链表
1. 从底层存储结构来看,数组需要一块连续的内存空间来存储,而链表并不需要一块连续的内存空间,它通过指针将一组零散的内存块串联起来,每个内存块就是链表的一个结点。
2. 为了将所有结点连接起来,每个结点除了存储数据之外,还需要记录下一个结点的指针next:后继指针。
3. 常见的链表结构有:单链表、双向链表和循环链表。单链表中第一个结点叫做头结点,最后一个结点叫做尾结点,尾结点的next指针指向空;循环链表是一种特殊的单链表,它的尾结点指向链表头结点;双向链表中每个结点不仅有一个后继指针next,还有一个前驱指针指向前面的结点。
解题思路
首先需要知道当前节点的前结点,然后当前结点指向前结点;
同时还需要当前结点的后续结点,如此进行循环。
代码实现
# 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]:
# 定义头结点的前一个节点为空
prev = None
while head:
# 记录当前节点的后续结点
back = head.next
# 当前结点指向前一个结点进行反转
head.next = prev
# 将前一个结点后移
prev = head
# 当前结点后移
head = back
# 返回反转链表头结点
return prev
参考博客
https://blog.csdn.net/Fe_cow/article/details/103744394
如有侵权,请联系作者删除