/*2.给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
struct ListNode* deleteDuplicates(struct ListNode* head){
}*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int main(){//主函数开始
//设定单链表
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode Head,*p0,*p1,*p2;//head是头指针,p0是前指针,p1是现指针,p2是后指针
Head.val=-1;
Head.next=NULL;
//deleteDuplicate函数开始
struct ListNode* deleteDuplicates(struct ListNode* head){
//最多n次循环,冒泡对比,有一个是内层的循环,有一个外层循环,外层循环执行的是录入n次,内层执行的是检测和前指向后
//循环开始
while(1){
//把头指针变成前指针和现指针
p0=p1=head;
while(1){//内循环开始
//如果现指针的数值与头指针一样就把前指针指向现指针指向的指针,前指针不变
if(head->val==p1->val){
p0->next=p1->next;
//printf("Testsame\n");
}
//如果不一样就把现指针变成前指针,
else{
p0=p1;
//printf("Testinsame\n");
}
//如果现指针指向的指针是空指针就终止内层循环
if(p1->next==NULL){//printf("Testbreak\n");
break;}
//把现指针指向的指针变成现指针
p1=p1->next;
/**
//把现指针指向的指针变成现指针
p1=p1->next;
//如果现指针是空指针就终止内层循环
if(p1==NULL){//printf("Testbreak\n");
break;}
**/
}//内循环结束
//如果头指针指向的指针是空指针就终止循环
if(head->next==NULL){break;}
//把头指针指向的指针变成头指针
head=head->next;
}//循环结束
}//deleteDuplicates函数结束
//inputList函数开始
struct ListNode* inputList(struct ListNode* head){
//需要输入n个数字
int n=0;
printf("Please enter how many number do you want to:");
scanf("%d",&n);
//循环n-1次
for(int i=1;i<=n-1;i++){
//分配新空间给后指针
p2=(struct ListNode*)malloc(sizeof(struct ListNode));
//让现指针指向后指针
head->next=p2;//printf("->");
//输入现指针的数值
scanf("%d ",&head->val);//printf("->");
//让现指针指向的指针变成现指针
head=head->next;
//printf("->");
}
//最后一次输入数字
scanf("%d",&head->val);
head->next=NULL;
}//inputList函数结束
//outputList函数开始
struct ListNode* outputList(struct ListNode* head){
while(1){
//判断现指针指向的指针是不是空指针,如果是就终止循环
if(head->next==NULL)break;
//输出现指针的数字
printf("%d->",head->val);
//把现指针指向的指针变成现指针
head=head->next;
}
//输出最后一个数值
printf("%d\n",head->val);
}
//outputList函数结束
inputList(&Head);outputList(&Head);
deleteDuplicates(&Head);outputList(&Head);
}//主函数结束
答案是完美的,任何数据都可以
评论区指点我
经验吸取
判断后才把现指针指向的指针变成现指针