链表求助


为什么我的代码运行一直是已停止工作啊,求助各位大佬~~~~

题目描述

按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。

输入

第一行输入元素个数n; 
第二行输入n个整数。

输出

第一行输出初始链表元素个数; 
第二行输出按照逆位序所建立的初始链表; 
第三行输出删除重复元素后的单链表元素个数; 
第四行输出删除重复元素后的单链表。

示例输入

10 
21 30 14 55 32 63 11 30 55 30

示例输出

10 
30 55 30 11 63 32 55 14 30 21 

30 55 11 63 32 14 21

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node * next;
}node;
/*void delet(int *n,node *head)
{
    node *p,*q,*r;
    p = head->next;  
    q = p;  
    while(p)  
    {  
        while(q->next)  
        {  
           if(p->data == q->next->data)  
           {  
               r = q->next;  
               q->next = r->next;  
               free(r);  
               (*n)--;
           }  
           else  
            q = q->next;  
        }  
        p = p->next;  
        q = p;  
    }


}*/ 
void show(node *head)
{
node *pr2 = head->next;
while(pr2!=NULL)
{
printf("%d ",pr2->data);
pr2 = pr2->next;
}
printf("%d\n",pr2->data);
}
node *create(int n)
{
int i;
node *head,*p;
head = (node *)malloc(sizeof(node));
head->next = NULL;
for(i=0;i<n;i++)
{
p = (node *)malloc(sizeof(node));
scanf("%d",&p->data);
p->next = head->next;
head->next = p;
}
return head;
}
void delet(int *n,node *head)
{
node *pr = head->next;


while(pr->next)
{
node *r = pr;
      node *p = r->next;
while(r->next)
{
if(pr->data==p->data)
{
r->next = p->next;
free(p);
(*n)--;
p = r->next;
}
else
{

r=r->next;
p=r->next;
}
}
pr = pr->next;

}


int main()
{
int n;
scanf("%d",&n);
node *head = create(n);
printf("%d\n",n);
show(head);
delet(&n,head);
printf("%d\n",n);
show(head); 
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值