在單鏈表中刪除值相同的多餘結點的演算法。
阿新 • • 發佈:2019-02-10
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
} LinkList;
LinkList* initialList(LinkList *linkList){
linkList = NULL;
LinkList *p;
int myArray[10] = {1,2,3,4,2,1,5,6,4,6};
int i;
for(i = 0; i < 10; i ++){
p = (LinkList*)malloc(sizeof(LinkList));
p ->data = myArray[i];
printf("%d ", p ->data);
p ->next = linkList;
linkList = p;
}
printf("\n");
return linkList;
}
LinkList* deleteSame(LinkList *La){
LinkList *p, *q, *t, *tmp;
//Lc = NULL;
for(p = La; p ->next != NULL; p = p ->next){
q = p;
while(q ->next){
if(q ->next->data == p ->data){
if(q ->next->next != NULL){
t = q ->next;
//q ->data = t ->data;
q ->next = t ->next;
free(t);
continue;
}
else{
t = q ->next;
q ->next = NULL;
free(t);
}
}
else{
q = q ->next;
}
}
}
return La;
}
int main(){
LinkList *La;
La = initialList(La);
La = deleteSame(La);
printf("result is: ");
while(La){
printf("%d ", La ->data);
La = La ->next;
}
return 0;
}
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
} LinkList;
LinkList* initialList(LinkList *linkList){
linkList = NULL;
LinkList *p;
int myArray[10] = {1,2,3,4,2,1,5,6,4,6};
int i;
for(i = 0; i < 10; i ++){
p = (LinkList*)malloc(sizeof(LinkList));
p ->data = myArray[i];
printf("%d ", p ->data);
p ->next = linkList;
linkList = p;
}
printf("\n");
return linkList;
}
LinkList* deleteSame(LinkList *La){
LinkList *p, *q, *t, *tmp;
//Lc = NULL;
for(p = La; p ->next != NULL; p = p ->next){
q = p;
while(q ->next){
if(q ->next->data == p ->data){
if(q ->next->next != NULL){
t = q ->next;
//q ->data = t ->data;
q ->next = t ->next;
free(t);
continue;
}
else{
t = q ->next;
q ->next = NULL;
free(t);
}
}
else{
q = q ->next;
}
}
}
return La;
}
int main(){
LinkList *La;
La = initialList(La);
La = deleteSame(La);
printf("result is: ");
while(La){
printf("%d ", La ->data);
La = La ->next;
}
return 0;
}