单向链表的搭建

何为链表

链表就是在引用之前就有其先后顺序元素之间通过持有其他引用指针来完成有序的数据结构.
链表分为单项链表和双向链表本文只针对单向链表的搭建进行描述.

节点

通过指针连接的每个元素称之为节点,节点由指针以及所携带数据(也可以携带字符串,列表等)

指针

用来连接各个元素的自定义属性

整体实现

from typing import List #引用类型 :列表
# 节点创建
class Node:  
    def __init__(self, data):
        self.data = data #节点赋值
        self.next = None #定义指针
    #为了显示节点(将节点转化为字符串显示为出来)    
    def __repr__(self):  
        return f"Node({self.data})"
        
 # 链表创建
class LinkList: 
    def __init__(self):
        self.head = None #定义一个空的链表
        
    def insert_head(self, data):  # 头部插入
        new_node = Node(data)
        if self.head is not None:
            new_node.next = self.head
        self.head = new_node

    def append(self, data):  # 尾部插入
        if self.head is None:
            self.insert_head(data)
        else:
            cur = self.head
            while cur.next:
                cur = cur.next
            cur.next = Node(data)

    def insert(self, i, data):  # 中间插入
        if self.head is None or i == 1:
            self.insert_head(data)
        else:
            new_node = Node(data)
            cur = self.head
            pre = cur

            j = 1
            while j < i:
                pre = cur
                cur = cur.next
                j += 1
            pre.next = new_node
            new_node.next = cur

    def linklist(self, obj: List):  # 列表转化为链表
        new_node = Node(obj[0])
        self.head = new_node
        cur = self.head
        for i in obj[1:]:
            cur.next = Node(i)
            cur = cur.next
    def linklist(self,i,obj:List):#将一个列表转化为链表的一部分
        
        cur=self.head
        if cur is None or i==1:
            for i in obj[0:]:
                cur.next=Node(i)
                cur=cur.next
        else:
            pre=cur
            j=1
            while j<i:
                pre=cur
                cur=cur.next
                j+=1
            for i in obj[0:]:
                pre.next=Node(i)
                pre=pre.next
            pre.next=cur

    def delete_head(self):  # 删除头部
        cur = self.head
        if cur is None:
            print("空链表")
        else:
            self.head = cur.next

    def pop(self):  # 删除尾部方法一
        cur = self.head
        if cur is None:
            print('空链表')
        else:
            while cur.next.next is not None:
                cur = cur.next
            popf = cur.next.data
            cur.next = None
        return popf

    def pop(self):  # 删除尾部方法二
        cur = self.head
        pre = cur
        if cur is None:
            print('空链表')
        else:
            while cur.next:
                pre = cur
                cur = cur.next
            popf = cur.data
            pre.next = None
            return popf

    def print_list(self):  # 链表内容打印
        cur = self.head
        while cur:
            print(cur.data)
            cur = cur.next

    def __repr__(self):  # 链表打印
        current = self.head
        string_repr = ""
        while current:
            string_repr += f"{current} --> "
            current = current.next
        return string_repr + "END"


if __name__ == '__main__':  # 主函数
    ll = LinkList()
    ll.linklist([1, 2, 3, 4, 5])
    ll.append("append")
    ll.insert_head(100)
    ll.insert_head("ds")
    ll.insert_head(98)
    ll.append("append")
    ll.insert(3, "insert")
    # ll.delete_head()
    # ll.pop()

    ll.print_list()
    print("=" * 30)
    print(ll)
    print(ll.pop())


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值