在单链表中删除值相同的多余结点的算法。

来源:互联网 发布:淘宝上靠谱的韩代店 编辑:程序博客网 时间:2024/04/29 06:36
 #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;
 }
0 0
原创粉丝点击