实现单链表反转python

版权声明:本文为博主原创文章,转载请附上本博文链接。 https://blog.csdn.net/weixin_41704182/article/details/87423818

原链表:phead->1->2->3->4->None
新链表:new->None
单链表反转的实现过程:

  1. 反转第一个节点,防止在反转过程中由于节点1和节点2断开后找不到节点2,所以先将原链表的第二个节点保存在temp中。

    temp = phead.next
    

    结果:phead->1 ; temp->2->3->4->None

  2. 将原链表的第一个节点变为新链表的最后一个节点。

    phead.next = newhead
    

    结果:phead->1->None ; temp->2->3->4->None

  3. 将newhead重新链接新链表

    newhead = phead
    

    结果:newhead->1->None ; temp->2->3->4->None

  4. 为了下一次反转,需要将phead重新链接原链表

    phead = temp
    

    结果:newhead->1->None ; phead->2->3->4->None

  5. 按此步骤不断反转下一个节点

class Lnode:#d定义节点
    def __init__(self,x):
        self.val=x
        self.next=None

def Reverse(phead):
        if phead or phead.next is None: #判断是否为空表
            return phead
        newhead = None #建立新链表
        while phead:
            temp = phead.next #先将原链表的第二个节点保存在temp中
            phead.next = newhead #将原链表的第一个节点变为新链表的最后一个节点
            newhead = phead
            phead = temp
        return newhead

if __name__ == '__main__':
    phead = Lnode(1)#建立链表1->2->3->None
    p1 = Lnode(2)
    p2 = Lnode(3)
    phead.next = p1
    p1.next = p2
    p = Reverse(phead)
    while p:
        print(p.val)
        p = p.next

猜你喜欢

转载自blog.csdn.net/weixin_41704182/article/details/87423818
今日推荐