python求单链表的长度_2019.9.17-单向循环链表:遍历+求长度+添加元素(完整代码)...

# coding:utf-8

class Node(object):

"""節點0"""

def __init__(self, elem):

self.elem = elem

self.next = None

# node = None(100)

class SingleLinkList(object):

"""單向循環鏈表"""

def __init__(self, node=None):

self.__head = node

if node:

node.next = node

def is_empty(self):

"""鏈表是否爲空"""

return self.__head == None

def length(self):

"""鏈表長度"""

if self.is_empty():

return 0

# cur遊樸,用來移動遍歷節點

cur = self.__head

# count記錄數量

count = 1

while cur.next != self.__head:

count += 1

cur = cur.next

return count

def travel(self):

"""遍歷整個鏈表"""

cur = self.__head

while cur.next != self.__head:

print(cur.elem, end=" ")

cur = cur.next

# 退出循環, cur指向尾節點,但尾節點的元素未打印

print(cur.elem)

def add(self, item):

"""鏈表頭部添加元素,頭插法"""

node = Node(item)

if self.is_empty():

self.__head = node

node.next = node

else:

cur = self.__head

while cur.next != self.__head:

cur = cur.next

# 退出循環, cur指向尾節點

node.next = self.__head

self.__head = node

# cur.next = node

cur.next = self,__head

def append(self, item):

"""鏈表尾部添加元素,尾插法"""

node = Node(item)

if self.is_empty():

self.__head = node

node.next = node

else:

cur = self.__head

while cur.next != self.__head:

cur = cur.next

# node.next = cur.next

node.next = self.__head

cur.next = node

def insert(self, pos, item):

"""指定位置添加元素

:param pos 從0開始

"""

if pos <= 0:

self.add(item)

elif pos > (self.length()-1):

self.append(item)

else:

pre = self.__head

count = 0

while count < (pos-1):

count += 1

pre = pre.next

# 當循環退出後,pre指向pos-1位置

node = Node(item)

node.next = pre.next

pre.next = node

def remove(self, item):

"""刪除節點"""

cur = self.__head

pre = None

while cur != None:

if cur.elem == item:

# 先判斷此結點是否是頭節點

# 頭節點

if cur == self.__head:

self.__head = cur.next

else:

pre.next = cur.next

break

else:

pre = cur

cur = cur.next

def search(self, item):

"""查找節點是否存在"""

cur = self.__head

while cur != None:

if cur.elem == item:

return True

else:

cur = cur.next

return False

if __name__ == "__main__":

ll = SingleLinkList()

print(ll.is_empty())

print(ll.length())

ll.append(1)

print(ll.is_empty())

print(ll.length())

ll.append(2)

ll.add(8)

ll.append(3)

ll.append(4)

ll.append(5)

ll.append(6)

# 8 1 2 3 4 5 6

ll.insert(-1, 9) # 9 8 123456

ll.travel()

ll.insert(3, 100) # 9 8 1 100 2 3456

ll.travel()

ll.insert(10, 200) # 9 8 1 100 23456 200

ll.travel()

ll.remove(100)

ll.travel()

ll.remove(9)

ll.travel()

ll.remove(200)

ll.travel()

34fd0b2cc48fb9ad2b4387e4d6498acb.png

441bf6698418f304d4ab86e9d51fa441.png

dd9b7c5cf479d1c386f4c0ad67f0c652.png

8dac48587deb141c3339e31424c1d330.png

18855ee25ef2b08676ad8d9c0ad355ff.png

7ae11a3c71ecb9a15e76e4c67c512ea8.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值