当前位置: 代码迷 >> C语言 >> 链表急救
  详细解决方案

链表急救

热度:338   发布时间:2005-03-28 14:06:00.0
链表急救
#include"stdio.h"
typedef struct node
  {  int data;
     struct node *next;
  }NODE;
  int x,i;
  NODE *creat()
{  NODE *head,*p,*s;
    head=(NODE*)malloc(sizeof(NODE));
    p=head;
    printf("输入整数,以0标志结束\n");
    scanf("%d",&x);
    while(x!=0)
   {  s=(NODE*)malloc(sizeof(NODE));
      s->data=x;
      p->next=s;
      s->next=NULL;
      p=s;
      scanf("%d",&x);
   }
   p->next=NULL;
   p=head;
   head=head->next;
   free(p);
   return head;
}
void delete(head,x)
{  NODE *head,*p,*q;
   if(head==NULL) printf("链表下益\n");
   if(head->data==x)
   { p=head;
     head=head->next;
     free(p);
   }
   else
   { q=head; p=head->next;
     while(p!=NULL&&p->data!=x)
      if(p->data!=x)
      { q=p;p=p->next;
      }
      if(p!=NULL)
      { q->next=p->next;
        free(p);
      }
      else printf("没找到\n");
   }
}
main()
{  NODE *head,*p;
    head=creat();
   p=head;
   while(p!=NULL)
    { printf("%d",p->data);
      p=p->next;
    }
   printf("输入要删除的节点:");
   scanf("%d",&x);
   delete(head,x);
    p=head;
    while(p!=NULL)
    { printf("%d",p->data);
      p=p->next;
    }
}   //谁能调通就把200块拿去吧

[此贴子已经被作者于2005-3-28 14:18:27编辑过]


搜索更多相关的解决方案: 链表  急救  

----------------解决方案--------------------------------------------------------
你这个程序写得太乱了!给你点建议:
(1)没有必要把X和I定义为全局变量;
(2)在删除函数中,两个形参的类型应该定义;
如果你想要链表运算的程序,可以发个贴!但是,这个程序,修改量比较大,会改得面目全非的!
----------------解决方案--------------------------------------------------------
我真想扣你200的积分, 我只改了一点就行了。  我的跟书上差不多, 你说书烂啊?
----------------解决方案--------------------------------------------------------
看在只有你回帖子的份上,送你200积分~   反正我也拿不回了
----------------解决方案--------------------------------------------------------
不好意思!无功受禄。
有问题多交流!

----------------解决方案--------------------------------------------------------
好啊, 你QQ是多少?(注意: 不轮男女)
----------------解决方案--------------------------------------------------------

//改的程序如下: #include"stdio.h" #include"stdlib.h" //------这是你用分配函数时所用的库,必要

struct node { int data; struct node *next; }NODE; //现在你的NODE是全局变量.其实也没用上. struct node * cc() //--------前面的指针是struct node类型的 { int x; struct node *head=NULL,*p,*s; //---要写成这样才对,NODE是变量,不能定义别人了. printf("输入整数,以0标志结束:"); scanf("%d",&x); while(x!=0) { s=(struct node*)malloc(sizeof(struct node)); //开辟空间把首地址给s s->data=x; //新的空间的值域部分赋键盘输入值 s->next=NULL; if(head==NULL) head=s; else p->next=s; p=s; printf("输入整数,以0标志结束:"); scanf("%d",&x); //输入下面一系列的数 } //p->next=NULL; //---我不明白你下面的话什么意思.我注视掉了 //p=head; //head=head->next; //free(p); //---这里怎么还要释放? return head; }

struct node * dd(struct node *head,int x) //这是的delete好像不能用,还是换成dd能使,delete是电脑的保留字 { struct node *p,*q; //---同上 if(head==NULL) {printf("链表下益\n"); return head;} //--返回吧!! if(head->data==x) { //--对 p=head; head=head->next; free(p); return head; } //--对 else { q=head; p=head->next; while((p!=NULL)&&(p->data!=x)) //--这样写,我觉得好些,自己也看的清. if(p->data!=x) { q=p; p=p->next;} if(p!=NULL) { q->next=p->next; free(p); } else printf("没找到\n"); } return head; }

void main() //----这样写好一点 { int x; struct node *head,*p; //---同上 head=cc(); p=head; while(p!=NULL) { printf("%5d",p->data); //----这里是%5d看的清楚点. p=p->next; } printf("\n输入要删除的节点:"); scanf("%d",&x); head=dd(head,x); //这里还是要返回的,因为当你删除的是第一个元素时,就会找不到指针了. p=head; while(p!=NULL) { printf("%5d",p->data); //----这里是%5d看的清楚点. p=p->next; } printf("\n"); //---这里也看的清楚点 } //你看看吧.我试了,可以了.


----------------解决方案--------------------------------------------------------
104873567

----------------解决方案--------------------------------------------------------
请问这位同志笑什么呢?我也笑
----------------解决方案--------------------------------------------------------
  相关解决方案