回 帖 发 新 帖 刷新版面

主题:链表删除函数,执行不正确,老是不能完成

#include "stdlib.h"
 #include "stdio.h"
 #define A sizeof(struct st)
   typedef struct st
  { int num;
   struct st *next;
  }dd;
  dd *list()/* 建立一个链表*/
  { dd *h,*r,*s;
  r=s=(dd *)malloc(A);
  printf("inter the data :\n");
  scanf("%d",&s->num);
  h=s;
  while(s->num!=0)
  { r->next=s;
    r=s;
    s=(dd *)malloc(A);
    printf("inter:\n");
    scanf("%d",&s->num);
  }
  r->next=NULL;
  return h;
 }
 dd print(dd *head)/* 这是输出函数,*/
{ dd *p;
  p=head;
  if(head!=NULL)
  do
  { printf("%3d",p->num);
   p=p->next;
  }while(p!=NULL);
 }
  dd del(dd *head)/* 这个是那个删除链表重复元素的函数*/
{
 dd *p,*q,*r;/* *p用于列举链表的每个节点*/
 p=head;
 if(p==NULL)
 printf("wrong !") ;
while(p!=NULL)        /* **********修改了p->next*/
 {   q=p;
   {
    if(q->next!=NULL&&q->next->num==p->num)/*用q来完成查找*/
   {
    r=q->next;
    p->next=q->next; /* 修改了p->next=q->next->next*/
    free(r);

    }
  else
   {q=q->next;}
  }
   p=p->next;
 }

}
main()
{ dd *p;
 p=list();
 print(p);
 printf("\nkai shi shan chu chognfu mo kuai :\n");
 del(p);
 print(p);
 getch();
 }

 /*出现老是输出零的原因,竟然是我没有加这个,include "stdlib.h"这个头问题,,晕死了
 */

但是,我检查了,理论上么有错误啊,但是,每当我输入一些相同的数的时候,却不能完成删除这些重复的数,而且吧,返回时还有0,要是顺序稍微一打乱了,入输入2 3 2 3 2 2 ,虽然调用了del函数但是输出还是原值,2 3 2 3 2 2 ,,请各位帮助一下,给个灵感,,,谢了,
 

回复列表 (共1个回复)

沙发

问题主要出在del函数上,以下是修改后的代码:
void del(dd *head)/* 这个是那个删除链表重复元素的函数*/
{
    dd *p,*q,*r;/* *p用于列举链表的每个节点*/
    p = head;
    if(p == NULL)
    {
        printf("wrong !");
    }
    while(p!=NULL)
    {
        q = p->next;
        r = p;
        while(q != NULL)
        {  
            if(q->num == p->num)/*用q来完成查找*/
            {
                r->next = q->next;
                free(q);
                q = r->next;

            }
            else
            {
                r = q;
                q = q->next;
            }
        }
        p = p->next;
    }

}


void print(dd *head)/* 这是输出函数,*/

    dd *p;
    p = head;
    if(head!=NULL)
    {
        do
        {
            printf("%3d",p->num);
            p = p->next;
        }while(p!=NULL);
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册