链表反转实现

方法一:双指针法

采用就地反转,不用额外开辟空间

注意:接收链表的head节点,返回当前节点

方法二:递归法

代码如下:

复制代码
class Node(object):
    def __init__(self, item, next=None):
        self.item = item
        self.next = next

def create_linklist_head(li):
    head = Node(li[0])
    for e in li[1:]:
        node = Node(e)
        node.next = head
        head = node
    return head

def create_linklist_tail(li):
    head = Node(li[0])
    tail = head
    for e in li[1:]:
        node = Node(e)
        tail.next = node
        tail = node
    return head

def print_linklist(lk):
    while lk:
        print(lk.item, end=',')
        lk = lk.next

def inverse_linklist(head):
    if head == None or head.next == None:
        return head
    currNode = head
    predNode = None
    while currNode:
        tmp = currNode.next
        currNode.next = predNode
        predNode = currNode
        currNode = tmp
    return predNode

def recursion_inverse_lk(head):
    if head == None or head.next == None:
        return head
    new_head = recursion_inverse_lk(head.next)
    head.next.next = head
    head.next = None
    return new_head


if __name__ == '__main__':
    lk = create_linklist_tail([1,2,3,4,5])
    print('原始:')
    print_linklist(lk)
    # res = inverse_linklist(lk)
    res = recursion_inverse_lk(lk)
    print('\n反转:')
    print_linklist(res)
复制代码

结果展示:

 

posted @   今夜无风  阅读(82)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示