面试题24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

注意:
h–>i–>j–>… 调整后:h<–i j–>…
若在调整节点i的next指针时,节点i的next指向了前一个节点,导致无法在链表中找到i的下一个节点j。为了避免出现这种链表在节点i处断开的情况,需要在调整节点i的next之前,把节点j保存下来。
也就是说,在调整节点i的next指针时,需要知道节点i本身,还需要知道i的前一个节点h,因为需要把节点i的next指向节点h。同时,还需要事先保存i的下一个节点j,防止链表断开。因此需要定义3个指针,分布指向当前遍历到的节点cur,以及它的上一个pre,下一个节点cur.next。
最后,找到反转后链表的头结点,反转后链表的头节点就是原始链表的尾节点,即?.next==None的节点

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre = None # 反转后的最后一个为None,不断更新pre,pre是反转后的结果
        while head: # 直到head为空停止循环
    		cur = head # 定义当前节点为当前的头结点
    		head = head.next # 将当前头节点后移一个,即去掉了原来的头节点
    		cur.next = pre # 将反转后得到的pre接到cur后面,更新了cur为当前反转后的结果
    		pre = cur # 将得到的更新后的cur赋给pre作为反转后的结果
    	return pre
        
发布了88 篇原创文章 · 获赞 31 · 访问量 5068

猜你喜欢

转载自blog.csdn.net/weixin_43455338/article/details/104928321
今日推荐