首页 > 其他分享 >HJ48_从单向链表中删除指定值的节点_单向链表

HJ48_从单向链表中删除指定值的节点_单向链表

时间:2023-03-29 15:59:43浏览次数:32  
标签:head cur self 单向 next 链表 HJ48 data

自定义类型链表:用链表的方式实现链表的生成、插入和删除。

思路:需要两个class,一个为node,用与生成节点,一个为linklist,用于定义节点操作以及初始化head头节点。

因为单向链表每个节点只有一个指针,因此在执行删除操作时,需要两指针并行。

head头节点作为特殊情况需要另一个if捕捉判断处理。

编程注意:

1、node(data)为生成新的节点。同一个data不能用node(data)操作,否则每次操作都是生成新节点。

2、链表使用的循环较多,要注意陷入死循环,或操作前后顺序搞错造成断链。

 1 #import sys
 2 #a = sys.stdin.sysreadline().strip().split()
#第一个数为链表长度,第二个数为头节点。后面两两一组,第一个数插在第二个数后面。最后一个数为要去删除的值。
3 a=[5, 2, 3, 2, 4, 3, 5, 2, 1, 4, 3] 4 class node(): 5 def __init__(self,data,next=None): 6 self.data=data 7 self.next=next 8 class linklist(): 9 def __init__(self): 10 self.head=None 11 def walk(self): 12 list1=[] 13 cur=self.head 14 while cur: 15 list1.append(cur.data) 16 cur=cur.next 17 print(" ".join(list(map(str,list1)))) 18 def insert(self,data1,data2): 19 cur=self.head 20 #print(data1,cur.data) 21 while cur!=None: 22 if cur.data==data1: 23 temp=node(data2) 24 temp.next=cur.next 25 cur.next=temp 26 break 27 else: 28 cur=cur.next 29 def remove(self,data): 30 if self.head.data==data: 31 self.head=self.head.next 32 else: 33 found=True 34 front=self.head 35 while found: 36 cur=front.next 37 #print(cur.data) 38 if cur.data==data: 39 #print(front.next.data,cur.next.data) 40 front.next=cur.next 41 #print(front.data,front.next.data) 42 found=False 43 else: 44 front=front.next 45 if cur==None: 46 found=False 47 new=a[2:-1] 48 pairs=[] 49 for k,i in enumerate(new): 50 if k%2==0: 51 pairs.append([i,new[k+1]]) 52 l=linklist() 53 l.head=node(a[1]) 54 c=0 55 print(pairs) 56 for i in range(len(pairs)): 57 # c=c+1 58 # print(f"{c:1.0f} walk") 59 data1=pairs[i][1] 60 data2=pairs[i][0] 61 l.insert(data1,data2) 62 #l.walk() 63 l.remove(a[-1]) 64 l.walk()

 

标签:head,cur,self,单向,next,链表,HJ48,data
From: https://www.cnblogs.com/tanyuanqing/p/17269192.html

相关文章

  • 删除链表的第N个节点|栈、双指针
    删除链表的倒数第N个节点类似于删除链表中的第N个节点,但是这里是倒数第N个且不知道链表的长度,如果用删除第N个节点的方法去解决问题的时候需要先知道链表的长度。这就需......
  • 两两交换链表中的节点|递归
    两两交换链表中的节点链表中每两两相邻的节点将其对调位置,涉及的主要操作位交换节。但需要注意初始位置的交换即返回值,以及奇数个节点的处理方法,这里给出两种方法,迭代和......
  • 环形链表|哈希、快慢指针
    环形链表判断一个链表中是否有环,如果有返回环的起始位置。难点有两个,一是判断是否有环,二是找到起始点。这里有两种方法,一种是哈希集,另一种是快慢指针。对应题目142.环......
  • 反转链表|递归
    反转链表将链表反转过来,可以对比反转数组,但是链表由于不知道链表大小所以反转数组的方法在这里会变得复杂。这里有两种方法,双指针和递归法。对应题目206.反转链表......
  • 双循环链表 by lyx
    #include<iostream>usingnamespacestd;template<classT>structDblNode{  Tdata;  DblNode<T>*lLink,*rLink;  DblNode(DblNode<T>*l=NULL,DblNod......
  • 链表的遍历
    练习1:一组整数已存放在带头结点的单链表中,设计算法,求结点值小于结点平均值的结点个数,并通过函数值返回结果。 #include<stdio.h>#include<stdlib.h>typedefstructnode{......
  • 数据结构-->单链表OJ题--->讲解_05
    本期我们讲解:>1.给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前本题的思路是创建两个链表,通过比较,一个存放小于x的结点的链表,另一个存放大于......
  • JPA的一对多映射(单向)
     JPA的一对多映射(单向)Postedon  CN.programmer.Luxh 注意:这里说的是一对多的单向关联,不是一对多的双向关联。实体Author:作者。实体Book:作者写的......
  • 数据结构-->单链表OJ题--->讲解_04
    本期我们讲解一道:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表所有结点组成的。现附上图示样例:现在上手代码:>SLTNode*CombineLists(S......
  • 快慢指针-leetcode141-判断链表中是否有环。
    LeetCode#141题目描述:给定一个链表,判断链表中是否有环。如果链表中存在环,则返回true。否则,返回false。进阶:你能用O(1)(即,常量)内存解决此问题吗?示例1:example1......