大神求解数据结构,单链表,要c语言完整详解,要直接贴上去就能编译的,急求速度,大神给力!满意还加分哦
有一个带头结点的单链表,所有元素值以非递减有序排列,head为其头指针,编写算法deldy-list()将该链表中多余元素值相同的结点删除。...
有一个带头结点的单链表,所有元素值以非递减有序排列,head为其头指针,编写算法deldy-list()将该链表中多余元素值相同的结点删除。
展开
1个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
struct Node{//链表中结点的结构体
int Value;
struct Node *next;
};
void Create_List(struct Node *head)//创建非递减有序的链表
{
struct Node *p,*q,*oldhead;
int temp,num;
printf("当输入链表的长度");
scanf("%d",&num);
while(num>=1)
{
p=(struct Node*)malloc(sizeof(struct Node));
scanf("%d",&temp);
p->Value=temp;
p->next=NULL;
if(head->next==NULL)
head->next=p;
else
{
q=head->next;
oldhead=head;
while(q!=NULL&&q->Value<temp)
{
q=q->next;
head=head->next;
}
if(q==NULL)
head->next=p;
else{
head->next=p;
p->next=q;}
head=oldhead;
}
num--;
}
}
void put(struct Node *head)//输出链表
{
struct Node *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->Value);
p=p->next;
}
printf("\n");
}
void Deldy_list(struct Node *head)//删除重复值
{
struct Node *p,*q;//工作指针
p=head->next;q=p->next;
while(q!=NULL)
{
if(p->Value==q->Value)//删除重复值
{
p->next=q->next;
free(q);
q=p->next;
}
else{
p=p->next;
q=q->next;
}
}
}
int main()
{
struct Node *head;//链表的头结点和尾结点
head=(struct Node*)malloc(sizeof(struct Node));
head->next=NULL;
Create_List(head);
put(head);
Deldy_list(head);
put(head);
return 1;
}
#include <stdlib.h>
struct Node{//链表中结点的结构体
int Value;
struct Node *next;
};
void Create_List(struct Node *head)//创建非递减有序的链表
{
struct Node *p,*q,*oldhead;
int temp,num;
printf("当输入链表的长度");
scanf("%d",&num);
while(num>=1)
{
p=(struct Node*)malloc(sizeof(struct Node));
scanf("%d",&temp);
p->Value=temp;
p->next=NULL;
if(head->next==NULL)
head->next=p;
else
{
q=head->next;
oldhead=head;
while(q!=NULL&&q->Value<temp)
{
q=q->next;
head=head->next;
}
if(q==NULL)
head->next=p;
else{
head->next=p;
p->next=q;}
head=oldhead;
}
num--;
}
}
void put(struct Node *head)//输出链表
{
struct Node *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->Value);
p=p->next;
}
printf("\n");
}
void Deldy_list(struct Node *head)//删除重复值
{
struct Node *p,*q;//工作指针
p=head->next;q=p->next;
while(q!=NULL)
{
if(p->Value==q->Value)//删除重复值
{
p->next=q->next;
free(q);
q=p->next;
}
else{
p=p->next;
q=q->next;
}
}
}
int main()
{
struct Node *head;//链表的头结点和尾结点
head=(struct Node*)malloc(sizeof(struct Node));
head->next=NULL;
Create_List(head);
put(head);
Deldy_list(head);
put(head);
return 1;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询