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

题目

总时间限制: 1000ms 内存限制: 65536kB

描述

给定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

要求:必须使用链表,不允许使用数组,也不允许不删除元素直接输出
程序中必须有链表的相关操作:建立链表,删除元素,输出删除后链表中元素,释放链表
不符合要求的程序即使通过,也会算作0分

输入

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

输出

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

样例输入

20
1 3 3 0 -3 5 6 8 3 10 22 -1 3 5 11 20 100 3 9 3
3

样例输出

1 0 -3 5 6 8 10 22 -1 5 11 20 100 9

题意

输入n,接着输入n个整数构建一个链表;然后输入待删除的整数值k,遍历链表并删除所有节点值等于k的节点;完成删除后,输出链表中剩余的所有节点值。

思路

首先创建链表,依次将输入的整数存入新节点并链接起来;然后遍历链表,定位并删除所有值与目标值相等的节点,删除完成后,再次遍历链表,输出剩余节点的值。

代码

#include<bits/stdc++.h>
using namespace std;
int n,k;
定义链表
struct p{
	int x;        // 节点存储的数据
	p *next;      // 指向下一个节点的指针
	p(){
		next=NULL; // 初始化next
	}
};

int main(){
	cin>>n;
	//创建链表
	p* h=new p;//创建头节点
	cin>>h->x;//读取头节点的值
	p* tmp;//临时指针
	tmp=h;//指向链表的最后一个节点
	for(int i=1;i<n;i++){
		p *t=new p(); //创建新节点
		cin>>t->x;    //读取新节点的值
		tmp->next=t;  //将新节点连接到链表后面
		tmp=t;        //让tmp指向新的末尾节点
	}
	tmp->next=h; //将最后一个节点指向头节点,形成循环链表
    cin>>k;
    //删除值为k的节点
    for(int i=0;i<n;i++){
		if(tmp->next->x==k){
			//如果下一个节点的值等于k,删除该节点
			tmp->next=tmp->next->next;
		}
		else{
			//否则移动到下一个节点
			tmp=tmp->next;
		}
	}
	tmp->next=NULL;
	tmp=h;
	if(tmp->x==k){
        tmp=h->next;//如果头节点要删除,就指向第二个节点
	}
	while(tmp!=NULL){//如果tmp不是空的就输出
		cout<<tmp->x<<' ';
		tmp=tmp->next;
	}
	return 0;
}
posted @ 2025-09-27 19:13  骁翊  阅读(13)  评论(0)    收藏  举报