用C语言实现在一个链表删除指定的一个或多个元素
2017-10-09 00:05
781 查看
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}LinkList;
//创建一个链表
LinkList *Creatlist_L(LinkList *L,int n){
LinkList *p,*h;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
h=L;
for(int i=0;i<n;i++){
p=(LinkList*)malloc(sizeof(LinkList));
scanf("%d",&p->data);
p->next=h->next;
h->next=p;
}
return L;
}
//删除指定的元素
LinkList *deletenode(LinkList *head,int m){
LinkList *p,*q,*s;
p=head;
q=head->next;
while(q){
if(q->data==m){
p->next=q->next;
s=q;
q=q->next;
free(s);
}else{
p=p->next;
q=q->next;
}
}
return head;
}
//输出链表
void printlist(LinkList *head){
LinkList *p;
p=head->next;
if(!p){
printf("The link is NULL!");
exit(0);
}
while(p){
printf("%d", p->data);
p=p->next;
}
}
int main(){
LinkList *head,*head1;
int n=0,num=0;
printf("请输入链表的长度:");
scanf("%d",&n);
head=Creatlist_L(head,n);
printf("链表创立成功!");
printf("\n");
printf("请输入要输入删除的元素:");
scanf("%d",&num);
printf("\n");
head=deletenode(head,num);
printlist(head);
}
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}LinkList;
//创建一个链表
LinkList *Creatlist_L(LinkList *L,int n){
LinkList *p,*h;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
h=L;
for(int i=0;i<n;i++){
p=(LinkList*)malloc(sizeof(LinkList));
scanf("%d",&p->data);
p->next=h->next;
h->next=p;
}
return L;
}
//删除指定的元素
LinkList *deletenode(LinkList *head,int m){
LinkList *p,*q,*s;
p=head;
q=head->next;
while(q){
if(q->data==m){
p->next=q->next;
s=q;
q=q->next;
free(s);
}else{
p=p->next;
q=q->next;
}
}
return head;
}
//输出链表
void printlist(LinkList *head){
LinkList *p;
p=head->next;
if(!p){
printf("The link is NULL!");
exit(0);
}
while(p){
printf("%d", p->data);
p=p->next;
}
}
int main(){
LinkList *head,*head1;
int n=0,num=0;
printf("请输入链表的长度:");
scanf("%d",&n);
head=Creatlist_L(head,n);
printf("链表创立成功!");
printf("\n");
printf("请输入要输入删除的元素:");
scanf("%d",&num);
printf("\n");
head=deletenode(head,num);
printlist(head);
}
相关文章推荐
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- 创建一个链表,插入删除,指定元素
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 实现在一个数组指定位置添加元素和删除元素的功能
- 用c语言实现一个通讯录; 通讯录可以存储1000个人的信息,信息包括姓名、性别、年龄、电话、住址 提供方法: 1.添加联系人信息 2.删除指定联系人信息 3.查找指定联系人信息 4.修改指定联系&
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- c语言使用链表编写一个可以实现班级学生管理系统,增加,删除,修改学生信息
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- 用JAVA实现:非递归算法在O(n)时间内将一个含有n个元素的单链表逆置,要求其辅助空间为常量
- 【C语言】实现对一个8bit数据的指定位的置0或者置1操作,并保持其他位不变。
- 单链表相关操作之C语言实现:插入,删除,倒转,复制,查找。。。
- 数据结构-链表实现删除全部特定元素x
- C++单链表中删除指定范围内的元素
- 递归删除链表中的指定元素x
- 编写一个程序,实现删除链表中倒数第k个节点(用单链表实现)
- C语言实现链表之双向链表(十)删除任意结点
- 【LintCode-452】删除链表中的元素(Java实现)