| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 487 人关注过本帖, 1 人收藏
标题:合并有序链表,为啥最后输出的链表A和C是一样的
只看楼主 加入收藏
踩不扁小强
Rank: 2
等 级:论坛游民
帖 子:46
专家分:39
注 册:2013-4-6
结帖率:91.67%
收藏(1)
已结贴  问题点数:20 回复次数:2 
合并有序链表,为啥最后输出的链表A和C是一样的
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int

typedef int Status;
typedef struct LNode
{
 int data;
 struct LNode *next;
}LNode,*LinkList;


int CreateLink_L(LinkList &L,int n)
{
// 创建含有n个元素的单链表
  LinkList p,q;
  int i;
  L=(LinkList)malloc(sizeof(LNode));
  L->next=NULL;              // 先建立一个带头结点的单链表
  q=(LinkList)malloc(sizeof(LNode));
  q=L;
  for(i=0;i<n;i++)
  {
    p=(LinkList)malloc(sizeof(LNode));  // 生成新结点
    q->next=p;
    q=p;
  }
  p->next=NULL;
  return OK;
}
int CreateLink_C(LinkList &L,int n)
{
// 创建含有n个元素的单链表
  LinkList p,q;
  int i;
  L=(LinkList)malloc(sizeof(LNode));
  L->next=NULL;              // 先建立一个带头结点的单链表
  q=(LinkList)malloc(sizeof(LNode));
  q=L;
  for(i=0;i<n;i++)
  {
    p=(LinkList)malloc(sizeof(LNode));  // 生成新结点
    q->next=p;
    q=p;
  }
  p->next=NULL;
  return OK;
}

int LoadLink_L(LinkList &L)
{
// 单链表遍历
 LinkList p=L->next;
 if(!L->next)
     printf("The List is empty!");
 else
 {
     while(p)
     {
        printf("%d ",p->data);
        p=p->next;
     }
 }
 printf("\n");
 return OK;
}


Status ListInsert_L(LinkList &L, int i, ElemType e) {  // 算法2.9
  // 在带头结点的单链线性表L的第i个元素之前插入元素e
  LinkList p,s;
  p = L;   
  int j = 0;
  while (p && j < i-1) {  // 寻找第i-1个结点
    p = p->next;
    ++j;
  }
  if (!p || j > i-1) return ERROR;      // i小于1或者大于表长
  s = (LinkList)malloc(sizeof(LNode));  // 生成新结点
  s->data = e;  s->next = p->next;      // 插入L中
  p->next = s;
  return OK;
} // LinstInsert_L

Status ListDelete_L(LinkList &L, int i, ElemType &e) {  // 算法2.10
  // 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
  LinkList p,q;
  p = L;
  int j = 0;
  while (p->next && j < i-1) {  // 寻找第i个结点,并令p指向其前趋
    p = p->next;
    ++j;
  }
  if (!(p->next) || j > i-1) return ERROR;  // 删除位置不合理
  q = p->next;
  p->next = q->next;           // 删除并释放结点
  e = q->data;
  free(q);
  return OK;
} // ListDelete_L

void MergeList_L(LinkList La,LinkList Lb,LinkList &Lc)
{
   LinkList pa,pb,pc;
   pa=La->next;
   pb=Lb->next;
   Lc=pc=La;
   while(pa&&pb)
   {
       if(pa->data<=pb->data)
       {
           pc->next=pa;
           pc=pa;
           pa=pa->next;
       }
       else
       {
           pc->next=pb;
           pc=pb;
           pb=pb->next;
       }
   }
   pc->next=pa?pa:pb;
}
void input_L(LinkList &L,int n)//输入链表数据
{
    int i;
    LinkList p;
    ElemType e;
    p=L->next;
    for(i=0;i<n;i++)
    {
        scanf("%d",&e);
        p->data=e;
        p=p->next;
    }
}
void main()
{
    LinkList A,B,C;
    int n,k;
    scanf("%d",&n);
    CreateLink_L(A,n);
    input_L(A,n);
    scanf("%d",&k);
    CreateLink_L(B,k);
    input_L(B,k);
    CreateLink_L(C,n+k);
    MergeList_L(A,B,C);
    printf("List A:");
    LoadLink_L(A);
    printf("List B:");
    LoadLink_L(B);
    printf("List C:");
    LoadLink_L(C);
}
搜索更多相关主题的帖子: include 元素 
2013-10-08 21:28
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:14 
我来看四楼怎么说

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-10-08 21:48
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
楼主东拼西凑了一些函数,从代码中根本就看不出一个有效思路。
学习要思考,才会有长进。
程序代码:
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int

typedef int Status;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;


int CreateLink_L(LinkList &L,int n)
{
// 创建含有n个元素的单链表
  LinkList p,q;
  int i;
  L=(LinkList)malloc(sizeof(LNode));
  L->next=NULL;              // 先建立一个带头结点的单链表
  q=(LinkList)malloc(sizeof(LNode));
  q=L;
  for(i=0;i<n;i++)
  {
    p=(LinkList)malloc(sizeof(LNode));  // 生成新结点
    q->next=p;
    q=p;
  }
  p->next=NULL;
  return OK;
}


int LoadLink_L(LinkList &L)
{
// 单链表遍历
LinkList p=L->next;
if(!L->next)
     printf("The List is empty!");
else
{
     while(p)
     {
        printf("%d ",p->data);
        p=p->next;
     }
}
printf("\n");
return OK;
}




void MergeList_L(LinkList La,LinkList Lb,LinkList &Lc)
{
   LinkList pa,pb,pc;
   pa=La->next;
   pb=Lb->next;
   Lc=pc=La;
   while(pa&&pb)
   {
       if(pa->data<=pb->data)
       {
           pc->next=pa;
           pc=pa;
           pa=pa->next;
       }
       else
       {
           pc->next=pb;
           pc=pb;
           pb=pb->next;
       }
   }
   pc->next=pa?pa:pb;
}
void input_L(LinkList &L,int n)//输入链表数据
{
    int i;
    LinkList p;
    ElemType e;
    p=L->next;
    for(i=0;i<n;i++)
    {
        scanf("%d",&e);
        p->data=e;
        p=p->next;
    }
}
void main()
{
    LinkList A,B,C;
    int n,k;

    scanf("%d",&n);
    CreateLink_L(A,n);
    input_L(A,n);

    scanf("%d",&k);
    CreateLink_L(B,k);
    input_L(B,k);
   
    printf("List A:");
    LoadLink_L(A);

    printf("List B:");
    LoadLink_L(B);

    MergeList_L(A,B,C);
    printf("List C:");
    LoadLink_L(C);
} 

www.qunxingw.wang
2013-10-09 20:09
快速回复:合并有序链表,为啥最后输出的链表A和C是一样的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018747 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved