【无头结点单链表各种操作】

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

#创建链表
def create_list(l,n):
    l.val = int(input())
    p = l
    for i in range(n-1):
        node = ListNode()
        node.val = int(input())
        p.next = node
        p = p.next
    p.next = None
#获取链长度
def length(l):
    p = l
    llen = 0
    while p:
        llen += 1
        p = p.next
    return llen

#链表翻转
def reverse(l):
    res = pre = None
    p = l
    while p:
        pre = p.next
        p.next = res
        res = p
        p = pre
    return res#返回头指针

#遍历链表
def traverse(l):
    p = l
    while p:
        print(p.val)
        p = p.next

#在n位置插入链表
def insert(l,n,val):
    p = l
    count = 1
    node = ListNode()
    node.val = val
    if n == 0:
        node.next = p
        p = node
        return p#返回头指针

    elif n > length(l):
        print('插入错误')
        return p#返回头指针

    elif n == length(l):
        for i in range(n-1):
            p = p.next
        node.next = p.next
        p.next = node
        return l#返回头指针

    else:
        while p and count < n:
            count += 1
            p = p.next
        node.next = p.next
        p.next = node
        return l#返回头指针
def isempty(l):
    p = l
    if p == None:
        # print('链表为空')
        return False
    else:
        # print('链表不为空')
        return True
#删除链表,在n位置删除链表元素[1,2,3,4,5,6]
def delete(l,n):
    p = l
    if not isempty(l):
        print('链表为空')
        return  l
    elif n >= length(l):
        print('超出链表长度')
        return l
    elif n == 0:
        p = p.next
        return p
    else:
        n -= 1
        while n and p.next:
            n -= 1
            p = p.next
        p.next = p.next.next
        return l

#查看第n个元素
def look(l,n):
    p = l
    if not isempty(l):
        print('链表为空')
        return l
    if n >= length(l):
        print('超出链表长度')
        return l
    if n == 1:
        print('第1个元素为%s' % p.val)
    else:
        for i in range(1, n):
            p = p.next
        print('第%d个元素为%s' % (n, p.val))

if __name__ == '__main__':
    l = ListNode()
    create_list(l, 5)
    traverse(l)
    print('链表l长度为%d'% length(l))
    l = insert(l,5,0)
    l = insert(l,0,0)
    traverse(l)
    print('链表l长度为%d' % length(l))

    print('------------')
    l = delete(l, 5)
    traverse(l)
    print('链表l长度为%d' % length(l))

    look(l,1)
    look(l,5)
    look(l,7)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值