前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python实现链表---单向循环链表

用Python实现链表---单向循环链表

作者头像
算法与编程之美
发布2023-10-25 11:35:02
1220
发布2023-10-25 11:35:02
举报

1 问题

如何利用python实现单向循环链表简化数学问题?

2 方法

  1. add方法:向链表头部添加一个节点data
  2. append方法:向链表尾部添加一个节点,值为data
  3. remove方法:删除链表中第一个值为data的节点

代码清单 1

class Node: def __init__(self, data, _next=None): self.data = data self.next = _next class SingleCycleLinkList: def __init__(self): self.head = None self._length = 0 def is_empty(self): return self._length == 0 def length(self): return self._length def nodes_list(self): ls = [] if self.is_empty(): return ls else: ls.append(self.head.data) cur = self.head.next while cur != self.head: ls.append(cur.data) cur = cur.next return ls def add(self, data): node = Node(data) if self.is_empty(): self.head = node node.next = node else: node.next = self.head cur = self.head while cur.next != self.head: cur = cur.next cur.next = node self.head = node self._length += 1 def append(self, data): node = Node(data) if self.head != None: cur = self.head while cur.next != self.head: cur = cur.next cur.next = node node.next = self.head else: self.head = node node.next = node self._length += 1 def insert(self, pos, data): if pos <= 0: self.add(data) elif pos >= self._length: self.append(data) else: node = Node(data) cur = self.head n = 0 while n < pos - 1: cur = cur.next n = n + 1 node.next = cur.next cur.next = node self._length += 1 def remove(self, data): if self.is_empty(): return -1 else: cur = self.head flag = True prev = None while cur != self.head or flag: flag = False if cur.data == data: if prev == None last_node = self.head while last_node.next != self.head: last_node = last_node last_node.next = self.head.next self.head = self.head.next else: prev.next = cur.next self._length -= 1 return 0 prev = cur cur = cur.next return -1 def modify(self, pos, data if pos < 0 or pos >= self._length: print("位置不正确") else: cur = self.head n = 0 while n < pos: cur = cur.next n = n + 1 cur.data = data def search(self, data): if self.is_empty(): return False else: cur = self.head flag = True flag = False if cur.data == data: return True cur = cur.next return False if __name__ == "__main__": l1 = SingleCycleLinkList() print(l1.head, l1.length()) l1.add(1) print(l1.nodes_list()) l1.add(2) print(l1.nodes_list()) print(l1.head.data, l1.head.next.data, l1.head.next.next.data) l1.append(4) print(l1.nodes_list()) l1.insert(1, 7) print(l1.nodes_list()) l1.remove(2) print(l1.nodes_list()) l1.modify(1, 3) print(l1.nodes_list()) print("查找") print(l1.search(3))

3 结语

运用单向循环链表可以用来解决约瑟夫环问题,但目前通过python来解决此类问题只能停留在最基本的层面上,要想深入解决此类问题,则要通过后续的学习,了解更多的python知识,从来实现对该类问题的完美解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档