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

def is_empty(self):

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

return self.__head == None

def length(self):

"""鏈表長度"""

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

cur = self.__head

# count記錄數量

count = 0

while cur != None:

count += 1

cur = cur.next

return count

def travel(self):

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

cur = self.__head

while cur != None:

print(cur.elem, end=" ")

cur = cur.next

print("")

def add(self, item):

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

node = Node(item)

node.next = self.__head

self.__head = node

def append(self, item):

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

node = Node(item)

if self.is_empty():

self.__head = node

else:

cur = self.__head

while cur.next != None:

cur = cur.next

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()

9e5c4e1909a569e8700ee8e2b7395a16.png

88d8547aeecebe86bf612518d2444551.png

7434d95ad3589e2e76f61ee2d21fd32c.png

f47178c0f42b8b1c89b383880c9dee57.png

9e3e667e3beb123e312117756f3f2356.png

最终显示结果

a84ed3ba0c1788127c15439891e01068.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值