删除数组中的元素(链表)

【问题描述】

给定N个整数,将这些整数中与M相等的删除 
假定给出的整数序列为:1,3,3,0,-3,5,6,8,3,10,22,-1,3,5,11,20,100,3,9,3 
应该将其放在一个链表中,链表长度为20 
要删除的数是3,删除以后,链表中只剩14个元素:1 0 -3 5 6 8 10 22 -1 5 11 20 100 9

【输入】

包含3行:
第一行是一个整数n(1 <= n <= 200000),代表数组中元素的个数。
第二行包含n个整数,代表数组中的n个元素。每个整数之间用空格分隔;每个整数的取值在32位有符号整数范围以内。
第三行是一个整数k,代表待删除元素的值(k的取值也在32位有符号整数范围内)。输出输出只有1行:
将数组内所有待删除元素删除以后,输出数组内的剩余元素的值,每个整数之间用空格分隔。

【输出】

输出只有1行:
将数组内所有待删除元素删除以后,输出数组内的剩余元素的值,每个整数之间用空格分隔。

嗯......就是依次查找要删除的元素,在它前面的一个节点停下,将这个节点的 *next 连到要删除的元素的下一个节点上,最后释放要删除的元素的内存。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 struct node
 8 {
 9     int data;
10     node *next;
11 }*head, *p, *r;
12 int n, x;
13 int main()
14 {
15     scanf("%d", &n);
16     int a;
17     head = new node; head -> next = NULL;
18     r = head;    //初始化
19     for(int i = 1; i <= n; ++i)    //建立链表
20     {
21         scanf("%d", &a);
22         p = new node;
23         p -> data = a;
24         p -> next = NULL;
25         r -> next = p;
26         r = p;
27     }
28     p = head;
29     scanf("%d", &x);
30     while(p != NULL)
31     {
32         node *s = p -> next;
33         if(s && s -> data == x)
34         {
35             p -> next = p -> next -> next;
36             free(s);    //释放结点s的内存
37         }
38         else p = p -> next;
39         /*一定要加上这个else,因为我们要判断的是下一个数,
40         而删除后的下一个数就是被删除的数的下个数了。否则
41         将跳过一个数,会漏查*/
42     }
43     p = head -> next;
44     while(p -> next != NULL)
45     {
46         printf("%d ",p -> data);
47         p = p -> next;
48     }
49     printf("%d\n", p -> data);
50     return 0;
51 }

因为链表中的元素没有一个具体的位置,我们只能知道一个结点和谁连着的,这也就导致我们查找每一个结点是必须从头找,不是很快捷。但凡事都是有两面性,我们也就可以在链表中忽略位置这个概念,在删除和添加结点时就不用想数组一样将整体挪动位置或用 vis 数组标记。

总结一下,连表的操作其实就是指针域的操作。只要将每一个结点怎么连,连哪一个结点搞明白,那也就没什么难的地方了

原文地址:https://www.cnblogs.com/mrclr/p/8325851.html

时间: 2024-07-29 16:29:47

删除数组中的元素(链表)的相关文章

删除数组中某个元素

需求:已知一个数组,删除其中某个元素,其它向左移,最后一位补null值 分析: 1.找出要删除元素的下标,找个变量接收 2.此位置元素后面的元素依次向左移一位 3.补齐最后一位赋值null 4.输出新数组 /** * */ package com.cn.u4; /** * @author Administrator *删除数组中某个元素值 */ public class DelArray { public static void main(String[] args) { //定义数组 Stri

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

删除数组中某元素,返回含有剩余元素的数组

arr为删除前的数组,key为要删除的元素对象.//删除数组中某元素,返回含有剩余元素的数组------------------------------------function arrMove(arr, key){ var temp = []; for (var i=0; i<arr.length; i++) { if (arr[i] != key) { temp.push(arr[i]); } } return temp;}

js删除数组中的元素

js删除数组中的元素delete和splice的区别 例如有一个数组是 :var textArr = ['a','b','c','d']; 这时我想删除这个数组中的b元素: 方法一:delete 删除数组 delete textArr[1] 结果为: ["a",undefined,"c","d"] 只是被删除的元素变成了 undefined 其他的元素的键值还是不变. 方法二:aplice 删除数组 splice(index,len,[item]

[码海拾贝 之JS] JS 之删除数组中的元素

前言 在Java 中要从一个list 中删除一个元素, 直接使用 remove 方法就可以了. 在js 中的array 并没有 remove 方法, 但是在js 中array 有splice 方法可以达成相同的效果, 除此之外, 还可以使用其他方式来实现这个效果. 使用splice 方法实现从数组中删除元素 首先看一下 splice 方法如何使用. 语法 arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 index 必需.整数,规

删除数组中重复元素 (使用stl::set)

/* *程序作用删除数中重复的元素,先使用set 遍历一次数组,然后在使用两个指针,以及set查重, *去重复之后使用0填补多余空间 *复杂度 O(NlogN) *空间复杂度 O(N) */ #include<iostream> #include<set> using namespace std; void delete_over_arry(int *a,int len); void print(int *a ,int len); int main() { int p[]={1,1

jquery删除数组中重复元素

首先定义如下数组: var arr=[0,2,3,5,6,9,2]; 我们可以看到数组中存在重复元素'2'; 最后通过jquery筛选应该得到[0,2,3,5,6,9]; ok,首先我们再定义一个空数组,用来存放最后筛选出来的元素: var new_arr=[]; 利用jquery的$.inArray可以轻松实现: 遍历数组元素: for(var i=0;i<arr.length;i++) { var items=arr[i]; //判断元素是否存在于new_arr中,如果不存在则插入到new_

JS中删除数组中的元素方法

删除指定下标数组元素 Array.prototype.del=function(index){ if(isNaN(index)||index>=this.length){ return false; } for(var i=0,n=0;i<this.length;i++){ if(this[i]!=this[index]){ this[n++]=this[i]; } } this.length-=1; }; 删除指定元素 Array.prototype.indexOf = function(v

删除数组中的元素

1 public class Demo03 { 2 static char ch[] = {'1','2','3','4'}; 3 static char ch01[] = new char[ch.length-1]; 4 public static void main(String[] args) { 5 newch(2); 6 } 7 public static void newch(int i){ 8 if(i==0){ 9 for(int a=0;a<ch.length-1;a++) 1