zoukankan      html  css  js  c++  java
  • 链表

    链表:
    暗喻:链子,一环连着下一环,环环相连。
    一个对象包含一个指针指向下一个与它连接的对象
    node(0)-->node(1)--->node(2)....node(n)->None

    链表的基本元素有:
    • 节点:每个节点有两个部分,左边部分称为值域,用来存放用户数据;右边部分称为指针域,用来存放指向下一个元素的指针。
    • head:head节点永远指向第一个节点
    • tail: tail永远指向最后一个节点
    • None:链表中最后一个节点的指针域为None值

    class Node:
    
        def __init__(self, value, next=None):
            self.value = value
            self.next = next
    
    
    node1 = Node(1)
    # node2 = Node(2)
    # node3 = Node(3)
    #
    # node1.next = node2
    # node2.next = node3
    
    
    # 链表的长度
    # 链表里面插入一个元素,1)在最前面插入 2)在最后面插入
    # 链表里面删除一个元素
    # 链表里面找一个元素
    class LinkChain:
    
        def __init__(self, head=None):
            self.head = head
    
        def __len__(self):
            count = 0
            while self.head:  # 结束循环的时候,一定最后找到None了
                count += 1
                self.head = self.head.next
            return count
    
        def insert_front(self, node):
            if self.head is None:
                self.head = node
                return
            node.next = self.head  # 将新插入节点的下一个节点
            # 设定为当前链表的头结点
            self.head = node  # 将链表的头结点设定为新插入的节点
    
        def append(self, node):
            if self.head is None:  # 判断当前链表是否为空
                self.head = node  # 为空,直接插入就可以了
                return
            cur_node = self.head  # 不为空的情况下,从head开始遍历
            while cur_node:  # 表示node有内容,不是None
                if cur_node.next is None:  # 找到某个节点,它的next是None
                    # 表示它是链表的最后一个节点
                    cur_node.next = node  # 把新节点挂到最后一个节点
                    break  # 结束循环
                cur_node = cur_node.next  # 将下一个节点设定为当前节点
    
        def find(self, value):
            node = self.head
            while node:  # 表示node有内容,不是None
                if node.value == value:
                    return node
                node = node.next
            return None
    
        def get_all(self):
    
            node = self.head
            all = []
            while node:  # 表示node有内容,不是None
                all.append(node.value)
                node = node.next
            return all
    
        # 1 2 3--->1.next->3
        def delete_node(self, value):
            if self.head.value==value:
                self.head = self.head.next
                return
            node = self.head
            tail = node.next
            while node:  # 表示node有内容,不是None
                if tail.value == value:
                    node.next = tail.next  # 如果tail是最后一个,那它的
                    # 它的next一定是None,直接复制给
                    # node.next即可
                    break
                node = node.next
                tail = node.next
    
    
    if __name__ =='__main__':
    
        l = LinkChain(node1)
        l.insert_front(Node(2))
        l.append(Node(5))
        print(l.get_all())
        print(l.find(5).value)
        print("_____")
        l.delete_node(5)
        print(l.get_all())
  • 相关阅读:
    牛客练习赛51 D题
    Educational Codeforces Round 72 (Rated for Div. 2) C题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) C题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) A题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) A题
    Educational Codeforces Round 72 (Rated for Div. 2) B题
    Educational Codeforces Round 72 (Rated for Div. 2) A题
    《DSP using MATLAB》Problem 7.2
    《DSP using MATLAB》Problem 7.1
    《DSP using MATLAB》Problem 6.24
  • 原文地址:https://www.cnblogs.com/ff-gaofeng/p/12097334.html
Copyright © 2011-2022 走看看