wangrong
2025-09-23 f19a0e925da02a08b88784a534b16ec6d833df4c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import json
class Node:
 
    def __init__(self, item: int, track: json, next=None):
        self.item = item
        self.track = track
        self.next = next
 
 
class LinkedList:
 
    def __init__(self):
        self.head = None
 
    def find_by_value(self, value: int):
        # 根据值查找节点
        p = self.head
        while p and p.item != value:
            p = p.next
        return p
 
    def find_by_index(self, position: int):
        # 根据索引位置查找节点,需要挨个遍历
        p = self.head
        index = 0
        while p and index != position:
            p = p.next
            index += 1
        return p
 
    def insert_value_to_head(self, value: int, data: json):
        node = Node(value, data)
        self.insert_node_to_head(node)
        print(f"add node: {value}")
 
    def insert_node_to_head(self, node):
        if node:
            node.next = self.head
            self.head = node
 
    def insert_node_after(self, node, new_node):
        if not node or not new_node:
            return
        new_node.next = node.next
        node.next = new_node
 
    def insert_value_after(self, node, value, data):
        new_node = Node(value, data)
        self.insert_node_after(node, new_node)
 
    def insert_node_before(self, node, new_node):
        if not self.head or not node or not new_node:
            return
 
        if node == self.head:
            self.insert_node_to_head(new_node)
            return
 
        p = self.head
        while p and p.next != node:
            p = p.next
 
        if not p:
            return
 
        new_node.next = node
        p.next = new_node
 
    def insert_value_before(self, value: int, data: json, node):
        new_node = Node(value,data)
        self.insert_node_before(node, new_node)
 
    def delete_by_node(self, node):
        if not self.head or not node:
            return
 
        if node.next:
            node.item = node.next.item
            node.next = node.next.next
 
        p = self.head
        while p and p.next != node:
            p = p.next
 
        if not p:
            return
 
        p.next = node.next
 
    def delete_by_value(self, value: int, data: json):
        if not self.head or not value:
            return
        fake_head = Node(-1 , data)
        fake_head.next = self.head
        prev, current = fake_head, self.head
        while current:
            if current.item != value:
                prev.next = current
                prev = prev.next
            current = current.next
 
        if prev.next:  # current.item == value
            prev.next = prev.next.next
        self.head = fake_head.next
        print(f"delete node: {value}")
    def __repr__(self):
        # print linklist,rewrite func repr or func str
        a = []
        p = self.head
        while p:
            a.append(p.track)
            p = p.next
        return " ".join(map(str, a))
 
                
 
if __name__ == '__main__':
    l = LinkedList()
    for i in range(10):
        l.insert_value_to_head(i, {"name":f"w{i}"})
 
    node = l.find_by_value(5)
    new_name = "newNames"
    l.insert_value_before(20, {"name":f"w{new_name}"}, node)
    l.insert_value_after(node, 24, {"name":f"wafterName"})
    print(l)