删除单数链表中的元素 [英] delete elements in a singular linked list
本文介绍了删除单数链表中的元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在这段代码中,我删除了链表中的元素
in this code i am deleting the element in the linked list
11->12->13->14->15->12->16
11->12->13->14->15->12->16
如果我想删除 12 它只删除第一次出现的元素,即 o/p 将是
if i want to delete 12 it deletes only the first time occurrence element i.e o/p wll be
11->13->14->15->12->16
11->13->14->15->12->16
但是我想删除所有出现的 12,该怎么做?
but i want to delete all the occurrence of 12, how to do that?
谁能给我一些意见?
#include<stdio.h>
#include<stdlib.h>
void insertbeg();
void delpos();
void display();
struct node
{
int info;
struct node *link;
}*first=NULL;
struct node *create();
int item,key;
main()
{
int choice;
while(1)
{
printf("
choices are:
");
printf("
1.Insertbeg
2.delpos
3.display
4.exit
");
printf("Enter U'r choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: insertbeg(); break;
case 2: delpos(); break;
case 3: display(); break;
case 4: exit(1);
default: printf("INVALID CHOICE TRY AGAIN
");
}
}
}
struct node *create()
{
struct node *new;
new=(struct node*)malloc(sizeof(struct node));
return(new);
}
void insertbeg()
{
struct node *new;
new=create();
printf("Enter element to be inserted: ");
scanf("%d",&item);
if(first==NULL)
{
new->info=item;
new->link=NULL;
first=new;
}
else
{
new->info=item;
new->link=first;
first=new;
}
}
void delpos()
{
int key;
struct node *temp,*prev;
if(first==NULL)
{
printf("LIST IS EMPTY
");
return;
}
else
{
temp=first;
printf("Enter the KEY element which is to be deleted: ");
scanf("%d",&key);
/* while(temp->info!=key&&temp->link!=NULL)
{
prev=temp;
temp=temp->link;
}
if(temp->info==key)
{
prev->link=temp->link;
free(temp);
}
else
printf("key element not found in the list
");
*/
while(temp->link != NULL)
{
if(temp->info == key)
{
prev->link = temp->link;
free(temp);
temp = prev->link;
temp = temp->link;
}
else
temp = temp->link;
}
}
}
void display()
{
struct node *temp;
temp=first;
if(temp==NULL)
{
printf("LIST IS EMPTY
");
return;
}
else
{
printf("Elements in Linked Lists: ");
while(temp!=NULL)
{
printf("%d->",temp->info);
temp=temp->link;
}
}
}
推荐答案
我可以发现您的代码有两个问题,但它们都不会显示您的示例输入有问题.
I can find two problems with your code but none of them would exhibit a problem with your sample input.
1-
while(temp->link != NULL)
应该
while(temp!=NULL)
2- temp = temp->link;
在
if(temp->info == key)
{
prev->link = temp->link;
free(temp);
temp = prev->link;
temp = temp->link;
}
并跳过一个元素.
这篇关于删除单数链表中的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文