#include<iostream>
using namespace std;
typedef struct Node
{
int val;
Node *next;
}node;
node* mycreat(int n)
{
node *head=NULL,*p=NULL,*sec=NULL;
head=(node*)malloc(sizeof(node));
p=head;
while(n--)
{
int v;
scanf("%d",&v);
sec=(node*)malloc(sizeof(node));
sec->val=v;
p->next=sec;
p=sec;
}
p->next=NULL;
return head;
}
void myprint(node *head)
{
node *p=NULL;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->val);
p=p->next;
}
printf("\n");
return;
}
node* mydel(node *head,int d)
{
node *p=NULL,*q=NULL;
q=head;//q为主线
p=head->next;//p动态查找要删除的值
while(p!=NULL)
{
if (p->val==d)
{
q->next=p->next;//找到的时候主线q跳过p
delete p;
p=q->next;//动态p重新连上主线q,p始终为q下一个
}
else
{
q=q->next;//没找到正常往下走
p=p->next;
}
}
return head;
}
void del(node *p)
{
node *q=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
delete q;
}
}
int main()
{
int n;
node *head=NULL;
while(~scanf("%d",&n))
{
if(n==0) break;
head=mycreat(n);
int d;
scanf("%d",&d);
myprint(head);
head=mydel(head,d);
myprint(head);
del(head);
}
return 0;
}
单链表操作
最新推荐文章于 2024-05-01 00:02:34 发布