#include<stdio.h>
#include<stdlib.h>
struct linklist {
int data;
struct linklist* next;
};
#define SIZE sizeof(struct linklist)
int main(void)
{
struct linklist* head,*p1,*p2;
int n,k;
int judge[10]={0,0,0,0,0,0,0,0,0,0};//链表的data区的值的范围为0~9,判断依据全部初始化为0
head = (struct linklist*)malloc(SIZE);
scanf_s("%d", &n);
getchar();
p2 = head;
while (n--)
{
p1 = (struct linklist*)malloc(SIZE);
scanf_s("%d", &p1->data);
getchar();
p2->next = p1;
p2 = p1;
}
p2->next=NULL;
//
// 链表建立成功
// p1 = head->next;
// p2 = head->next;
// while (p1!=NULL&&p1->next!=NULL)
// {
// p1 = p1->next->next;
// p2 = p2->next;
// }
// printf("----%d\n", p2->data);
//
//
// //找出到处第K个节点
// scanf("%d",&k);
// getchar();
// p1=head->next;
// p2=head->next;
// while(p1->next!=NULL)
// {
// if(--
//
// k<=0)
// {
// p2=p2->next;
// }
// p1=p1->next;//P1先走K-1步
//
// }
// if(k>0)
// return 0;
// else
// {
// printf("---------%d\n",p2->data);
// }
//删除重复节点
printf("删除重复节点\n");
p1=head->next->next;
p2=head->next;
judge[head->next->data]=1;
while(p1!=NULL)
{
if(judge[p1->data]==1)
{
p2->next=p1->next;
free(p1);
p1=p2->next;
}
else
{
judge[p1->data]=1;
p2=p2->next;
p1=p1->next;
}
if(p1==NULL)
{
p2->next=NULL;
printf("p2->%d\n",p2->data);
}
}
//
//元素输出
p1=head;
while(p1->next!=NULL)
{
printf("%d ",p1->next->data);
p1=p1->next;
}
return 0;
}
8找出倒数第K个节点及删除重复节点
最新推荐文章于 2024-09-23 14:27:27 发布