反转链表那件小事

231 阅读1分钟

大家好,我是程序员学长,今天我们来聊一聊反转链表这件小事。

Tips:反转链表虽然很简单,但却是各个大厂笔试面试中常考的题目。

你也许会有疑问,为什么那么喜欢考察反转链表呢?因为反转链表即考察了链表这种数据结构,也考察了你对指针概念的理解。所以,我们还是需要多多练习的。

问题描述

给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。
示例:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

分析问题

首先,我们按照题目的要求,先把图画出来,然后再分析。

从图中我们可以看到,反转前和反转后指针的指向发生了反转。所以,我们在实现的过程中,我们可以通过调整链表的指针来达到反转链表的目的。

代码实现

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def reverse(self, head):
        cur = head
        #初始化时,pre为None
        pre = None
        while cur:
            next=cur.next
            cur.next = pre
            pre = cur
            cur = next
        return pre

head=ListNode(1,None)
cur=head
for i in range(2,6):
    tmp=ListNode(i,None)
    cur.next=tmp
    cur=cur.next

s=Solution()
pre=s.reverse(head)

while pre!=None:
    print(pre.val)
    pre=pre.next

最后

到此为止,反转链表我们就聊完了。在关于链表的题目中,我们要注意链表指针改变的顺序,如果稍有不慎,就会写错。

你知道的越多,你的思维也就越开阔,我们下期再见。