leetcode系列:反转链表的形象表示
2023-12-13 13:57:24
反转链表是一道比较简单的题,主要考察的是对链表数据结构的理解和双指针应用,比较容易出错的地方是指针的移动顺序。在练习的过程中想到了一个比较形象的表示方法,于是记录下来。
# 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]:
pre = None
cur = head
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
1. 首先pre的定义是建立在对链表的理解上的,最终链表的head因为没有next节点,所以就是None。这个pre既是在后面表示前一个节点,又是在初始化时表示了反转后链表的尾部,这样就能理解为什么要定义pre。
2. cur表示当前节点,之后的while循环也是建立在cur上的,当cur为none了,表示这个链表遍历到尾部了。
3. tmp = cur.next和cur.next = pre这两句可以按照下面的图片理解:
????????本来A->cur->C是一个链表,如第一行;
????????tmp = cur.next其实相当于把cur->C的链接砍断,把C先存到别的地方去,如第二行;
????????cur.next = pre相当于把A->cur的链接砍断后添加了一个反向的链接,如第三行和第四行;
? ? ? ? 这两个操作后实现了cur->A,那么接下来的步骤就是该把C->cur了。
4. pre = cur和cur = tmp就是在把指针向后移,重复上面3的步骤,把C->cur。注意:在这个操作后pre就指向了cur,cur已经指向tmp,所以最后return的是pre而不是cur。
文章来源:https://blog.csdn.net/lynlindasy/article/details/134871074
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!