转载自博客
单链表的python实现.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # @Date : 2018-06-12 11:23:21
4 # @Author : yudanqu (943775910@qq.com)
5 # @Link : https://www.cnblogs.com/yudanqu/
6 # @Version : $Id$
7
8
9 class Node(object):
10 """节点"""
11
12 def __init__(self, elem):
13 self.elem = elem
14 self.next = None # 初始设置下一节点为空
15
16 '''
17 上面定义了一个节点的类,当然也可以直接使用python的一些结构。比如通过元组(elem, None)
18 '''
19
20
21 # 下面创建单链表,并实现其应有的功能
22
23
24 class SingleLinkList(object):
25 """单链表"""
26
27 def __init__(self, node=None): # 使用一个默认参数,在传入头结点时则接收,在没有传入时,就默认头结点为空
28 self.__head = node
29
30 def is_empty(self):
31 '''链表是否为空'''
32 return self.__head == None
33
34 def length(self):
35 '''链表长度'''
36 # cur游标,用来移动遍历节点
37 cur = self.__head
38 # count记录数量
39 count = 0
40 while cur != None:
41 count += 1
42 cur = cur.next
43 return count
44
45 def travel(self):
46 '''遍历整个列表'''
47 cur = self.__head
48 while cur != None:
49 print(cur.elem, end=' ')
50 cur = cur.next
51 print("\n")
52
53 def add(self, item):
54 '''链表头部添加元素'''
55 node = Node(item)
56 node.next = self.__head
57 self.__head = node
58
59 def append(self, item):
60 '''链表尾部添加元素'''
61 node = Node(item)
62 # 由于特殊情况当链表为空时没有next,所以在前面要做个判断
63 if self.is_empty():
64 self.__head = node
65 else:
66 cur = self.__head
67 while cur.next != None:
68 cur = cur.next
69 cur.next = node
70
71 def insert(self, pos, item):
72 '''指定位置添加元素'''
73 if pos <= 0:
74 # 如果pos位置在0或者以前,那么都当做头插法来做
75 self.add(item)
76 elif pos > self.length() - 1:
77 # 如果pos位置比原链表长,那么都当做尾插法来做
78 self.append(item)
79 else:
80 per = self.__head
81 count = 0
82 while count < pos - 1:
83 count += 1
84 per = per.next
85 # 当循环退出后,pre指向pos-1位置
86 node = Node(item)
87 node.next = per.next
88 per.next = node
89
90 def remove(self, item):
91 '''删除节点'''
92 cur = self.__head
93 pre = None
94 while cur != None:
95 if cur.elem == item:
96 # 先判断该节点是否是头结点
97 if cur == self.__head:
98 self.__head = cur.next
99 else:
100 pre.next = cur.next
101 break
102 else:
103 pre = cur
104 cur = cur.next
105
106 def search(self, item):
107 '''查找节点是否存在'''
108 cur = self.__head
109 while not cur:
110 if cur.elem == item:
111 return True
112 else:
113 cur = cur.next
114 return False
115
116
117 if __name__ == "__main__":
118
119 # node = Node(100) # 先创建一个节点传进去
120
121 ll = SingleLinkList()
122 print(ll.is_empty())
123 print(ll.length())
124
125 ll.append(3)
126 ll.add(999)
127 ll.insert(-3, 110)
128 ll.insert(99, 111)
129 print(ll.is_empty())
130 print(ll.length())
131 ll.travel()
132 ll.remove(111)
133 ll.travel()