时间:2021-05-22
先用使用常规方法,两个指针:
golang实现:
type Node struct { value int next *Node}type Link struct { head *Node tail *Node lenth int}// 向链表中添加元素func (link *Link) add(v int) { if link.lenth == 0 { // 当前链表是空链表 link.head = &Node{v, nil} link.tail = link.head link.lenth = 1 } else { newNond := &Node{v, nil} link.tail.next = newNond link.tail = newNond link.lenth += 1 }}// 删除链表中的元素(双指针)func (link *Link) remove(v int) { if link.lenth == 0 { fmt.Println("空链表,不支持该操作") return } var previous *Node = nil for current := link.head; current != nil; current = current.next { if current.value == v { if current == link.head { // 要删除的是头节点 link.head = current.next } else if current == link.tail { // 要删除的是尾节点 previous.next = nil link.tail = previous } else { // 要删除的是中间的节点 previous.next = current.next } link.lenth -= 1 break } previous = current }}// 打印链表func (link *Link) printList() { if link.lenth == 0 { fmt.Println("空链表") return } for cur := link.head; cur != nil; cur = cur.next { fmt.Printf("%d ", cur.value) } fmt.Println()}python实现:
class Node: def __init__(self, value, next): self.value = value self.next = next def __str__(self): return str(self.value)class Link: def __init__(self): self.head = None self.tail = None self.lenth = 0 # 向链表中添加元素 def add(self, v): if self.lenth == 0: # 当前链表是空链表 self.head = Node(v, None) self.tail = self.head self.lenth = 1 else: new_node = Node(v, None) self.tail.next = new_node self.tail = new_node self.lenth += 1 # 打印链表 def print(self): if self.lenth == 0: print('空链表') return cur = self.head while True: if cur == None: print() break print(cur, end=' ') cur = cur.next # 删除链表中的元素 def remove(self, v): if self.lenth == 0: return cur = self.head pre = None while True: if cur.value == v: if cur == self.head: # 要删除的是头节点 self.head = cur.next elif cur == self.tail: # 要删除的是尾节点 pre.next = None self.tail = pre else: # 要删除的是中间的节点 pre.next = cur.next self.lenth -= 1 break pre = cur cur = cur.next if cur == None: print("未找到", v) break只使用使用一个指针实现链表的删除:
golang实现:
func (link *Link) remove_with_one_pointer(v int) { if link.lenth == 0 { return } if link.tail.value == v { // 要删除的节点是尾节点,需特殊处理 if link.lenth == 1 { // 如果链表只有一个节点 link.head = nil link.tail = nil } else { //大于一个节点 cur := link.head for ; cur.next.next != nil; cur = cur.next { } //找到尾节点的前一个节点 cur.next = nil link.tail = cur } link.lenth -= 1 return } //要删除的节点在头部/中间 的常规情况 for cur := link.head; cur != nil; cur = cur.next { if cur.value == v { cur.value = cur.next.value cur.next = cur.next.next link.lenth -= 1 return } } fmt.Println("未找到", v)}python实现:
def remove_with_one_pointer(self, v): if self.lenth == 0: return if self.tail.value == v: # 要删除的节点是尾节点,需特殊处理 if self.lenth == 1: # 如果链表只有一个节点 self.head = None self.tail = None else: # 大于一个节点 cur = self.head while True: if cur.next.next is None: # 找到尾节点的前一个节点 break else: cur = cur.next cur.next = None self.tail = cur self.lenth -= 1 return # 要删除的节点在头部/中间 的常规情况 cur = self.head while True: if cur.value == v: cur.value = cur.next.value cur.next = cur.next.next self.lenth -= 1 break cur = cur.next if cur is None: print('未找到', v) break以上就是python/golang 删除链表中的元素的详细内容,更多关于python/golang 链表的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
java删除链表中的元素以下实例演示了使用Clear()方法来删除链表中的元素:importjava.util.*;publicclassMain{public
双向链表的基本操作1.利用尾插法建立一个双向链表。2.遍历双向链表。3.实现双向链表中删除一个指定元素。4.在非递减有序双向链表中实现插入元素e仍有序算法。5.
本文实例讲述了Java链表中元素删除的实现方法。分享给大家供大家参考,具体如下:该部分与上一节是息息相关的,关于如何在链表中删除元素,我们一步一步来分析:一、图
java数据结构单链表的实现单链表实现链表的打印及元素删除操作,链表的实现主要是next属性的定义,将一堆节点关联起来的。实现简单的链表如下:publiccla
python中关于删除list中的某个元素,一般有三种方法:remove、pop、del:1.remove:删除单个元素,删除首个符合条件的元素,按值删除举例说