链表反转(python)

class node():
    def __init__(self,i):
        self.val=i
        self.nextp=None

def print_(currp):
    print(currp.val)
    while 1:
        currp = currp.nextp
        print(currp.val)
        if not currp.nextp:
            break

def rev(phead):
    prep = phead
    currp = phead.nextp
    phead.nextp = None  # 务必归空,否则无限循环1、2节点
    tmpp = currp.nextp
    currp.nextp = prep
    while tmpp:
        prep = currp
        currp = tmpp
        tmpp = currp.nextp
        currp.nextp = prep
    return currp

while 1:
    i=int(input('请输入节点数:\n'))
    if i<1:
        print('输入错误')
    elif i==1:
        print(1)
        print('反转结果:')
        print(1)
    elif i==2:
        phead=node(1)
        phead.nextp=node(2)
        print_(phead)
        print('反转结果:')
        currp=phead.nextp
        currp.nextp=phead
        phead.nextp=None
        print_(currp)
    if i>=3:
        phead=node(1)
        phead.nextp=node(2)
        currp=phead.nextp
        for j in range(i-2):
            currp.nextp=node(j+3)
            currp=currp.nextp
        print_(phead)
        phead=rev(phead)
        print('反转结果:')
        print_(phead)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值