回 帖 发 新 帖 刷新版面

主题:求使用尾插法,生成一个升序链表

(1)使用尾插法,生成一个升序链表;(2)在上述链表中插入一个元素,使得链表依然升序;(3)在上述链表中查询是否存在元素X,如果存在则将其删除。 最好能都做完 本人菜鸟求高手做下 谢谢

回复列表 (共4个回复)

沙发

typedef int T;
typedef struct Node
{
  T data;
  struct Node *next;
}Node,*LinkList;

void f(LinkList &L)//算法
{
   L=(LinkList)malloc(sizeof(Node));
   L->next=NUll;
   L->data=0;
   LinkList p=L;
   T d;
   int n=0;
   printf("请输入一个元素(-1 to end):");
   while(scanf("%d",&d)&&d!=-1)
   {
     LinkList q=(LinkList)malloc(sizeof(Node));
     q->data=d;
     if(n==0){
         q->next=p;
         p->next=q;
         n++;
         printf("请输入一个元素(-1 to end):");
         continue;
      }
      while(p->data<d)
      {p=p->next;}
      if(p-data==d)
      {printf("你已经输入这个元素了!请重新输入!");continue;}
      q->next=p->next;
      p->next=q;
      p=L;//把L赋给p,以便当输入元素时,从第1个节点开始比较
      printf("请输入一个元素(-1 to end):");
   }
}

板凳

插入的差不多```就比较```
while(p->data<d)
      {p=p->next;}
      if(p-data==d)
      {printf("你已经输入这个元素了!请重新输入!");continue;}
      q->next=p->next;
      p->next=q;

3 楼

LinkList q=(LinkList)malloc(sizeof(Node));
     q->data=d;
应该放在
{printf("你已经输入这个元素了!请重新输入!");continue;}
之后,不然会有内存泄漏。

另外我不明白尾插法构造升序链表是怎么回事,原来的数据已经排好序了吗?1楼的朋友构造环形链表似乎和题意有所违背。

4 楼


这个并没有环`~~我的算法是:输入一个数,,比较链表中的元素,,找到一个比它大的数,这个把它插入到这个数之前~~
我建了一个数据结构群:[color=800000]群号: 40715759[/color]
欢迎加入

我来回复

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