m0_59531802
2021-06-30 15:57
采纳率: 100%
浏览 20

提问:怎么用python实现链表

看了理论描述之后写不出东西。请大佬们帮帮我用python表达一下一下这个链表谢谢:1→2→4

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • CSDN专家-黄老师 2021-06-30 16:03
    已采纳

    参考一下:https://blog.csdn.net/qq_39422642/article/details/78988976

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 这个程序实现了创建 插入 删除等功能

    #-*- coding:utf-8 _*
    """
    @author: YAOTIANLONG
    @file: Linklist.py
    @time: 2019/10/22
    """
    class ListNode:
        """单链表结点"""
        def __init__(self, data, next=None):
            self.data = data
            self.next = next
    
    
    class LinkList:
        """
        单链表基本操作:
            - 创建链表
            - 打印链表
            - 链表总长度
            - 判断链表是否为空
            - 在链表末尾追加元素item
            - 在index位置前插入元素item
            - 删除index位置上的元素
        """
        def __init__(self):
            self.head = None  # self.head为头结点
    
        def create(self, data):
            """
            创建链表
            :param data: list, 如:[1,2,3]
            :return:
            """
            if not isinstance(data, list) or len(data) == 0:  # 特殊判断:不是列表或者列表为空,退出程序
                return
            self.head = ListNode(data[0])  # 创建头结点
            p = self.head  # 指针p指向头结点,p的类型为None
            for i in data[1:]:  # 在头结点后边依次插入列表剩余结点
                p.next = ListNode(i)
                p = p.next
    
        def print(self):
            """
            打印链表,以空格分隔,末尾换行
            :return:
            """
            p = self.head
            while p:  # 遍历链表,打印结点值
                print(p.data, end=" ")
                p = p.next
            print()
    
        def len(self):
            """
            链表长度
            :return: len
            """
            p = self.head
            len = 0
            while p:  # 遍历链表,统计结点个数
                len += 1
                p = p.next
            return len
    
        def is_empty(self):
            """
            判断链表是否为空
            :return: True or False
            """
            return True if self.len() == 0 else False
    
        def append(self, item):
            """
            在链表末尾追加元素, 如:[1,2,3] =>append(4)=> [1,2,3,4]
            :param item: 追加元素的值
            :return:
            """
            p = self.head
            while p.next:
                p = p.next  # 找到末尾位置
            p.next = ListNode(item)  # 插入元素
    
        def insert(self, index, item):
            """
            在链表index位置之前插入元素item, 如:[1,2,3] =>insert(1,4)=> [1,4,2,3]
            :param index: 索引,从0开始
            :param item:  元素的值
            :return:
            """
            if index > self.len() or index < 0:  # 特殊判断,不在列表范围,退出程序
                return
            if index == 0:  # 在第一个位置插入
                self.head = ListNode(item, self.head)
                return
            p = self.head
            n = 0
            while n < (index-1):
                p = p.next
                n += 1  # 找到插入位置
            if index == self.len():
                p.next = ListNode(item)  # 在最后一个位置插入
            else:
                p.next = ListNode(item, p.next)  # 在中间位置插入
    
        def delete(self, index):
            """
            删除链表index位置上的元素, 如:[1,2,3] =>delete(1)=> [1,3]
            :param index: 索引,从0开始
            :return:
            """
            if index > self.len() or index < 0:  # 特殊判断,不在列表范围,退出程序
                return
            if index == 0:  # 在第一个位置插入
                self.head = self.head.next  # 跳过,删除元素
            else:
                p = self.head
                n = 0
                while n < (index-1):
                    p = p.next
                    n += 1  # 找到删除位置
                p.next = p.next.next  # 删除元素
    
    
    if __name__ == "__main__":
        a = LinkList()
        a.create([1, 2, 4])
        a.print()
        print("len:", a.len())
        print("head data:", a.head.data)
        print("LinkList Not None" if not a.is_empty() else "LinkList is None")
        a.append(20)
        a.print()
        a.insert(0, 30)
        a.print()
        a.delete(a.len()-1)
        a.print()
    
    

    img

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题