首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数据结构:合并A、B为线性表C的算法(期待你的解答)解决办法

2012-04-30 
数据结构:合并A、B为线性表C的算法(期待你的解答)2.23③ 设线性表A(a1,...,am), B(b1,...,bn),试写一个按

数据结构:合并A、B为线性表C的算法(期待你的解答)
2.23③ 设线性表A=(a1,...,am), B=(b1,...,bn),试写
一个按下列规则合并A、B为线性表C的算法,即使得
  C=(a1,b1,...,am,bm,bm+1,...,bn) 当m≤n时;
或者 C=(a1,b1,...,an,bn,an+1,...,am) 当m>n时。
线性表A、B和C均以单链表作存储结构,且C表利用A表和
B表中的结点空间构成。注意:单链表的长度值m和n均未
显式存储。

实现下列函数:
void Merge(LinkList ha, LinkList hb, LinkList &hc)
/* 依题意,合并带头结点的单链表ha和hb为hc */

单链表类型定义如下:
typedef struct LNode{
  ElemType data;
  struct LNode *next;
} LNode, *LinkList;

代码(已通过):


void Merge(LinkList ha, LinkList hb, LinkList &hc)
/* 依题意,合并带头结点的单链表ha和hb为hc */
{  
  LinkList p,q,s;
  p=ha->next;
  q=hb->next;
  hc=ha;
  s=hc; 
  while(p!=NULL&&q!=NULL)
  { //先插入A
  s->next=p;
s=p;
p=p->next;//后移
  //插入B
  s->next=q;
  s=q;
  q=q->next;  
   
  }
  if(q==NULL)
  {
  while(p!=NULL)//把剩余的ha插入到hc
  {s->next=p;
  s=p;
  p=p->next;
  }
  } 
  else
  while(q!=NULL) //把剩余的hb插入到hc
  {
  s->next=q;
  s=q;
  q=q->next;
  }
}

  代码是正确的 就是红色部分我不明白 s的next域指向了p,然后s又指向p,这样做的hc链表s不是没有递增吗?求解

[解决办法]
s=p;//就递增了

热点排行