卓迈文档网
当前位置 首页 >专题范文 > 公文范文 >

将两个链表合并成一个链表方法二

发布时间:2022-11-01 16:45:06 来源:网友投稿

下面是小编为大家整理的将两个链表合并成一个链表方法二,供大家参考。

将两个链表合并成一个链表方法二

 

 /* 链表的操作 1) 定义链表的结构;

 2) 写函数创建链表;

 3) 输入两个正数链表, 连接成一个非递减链表(用移动指针的方法)。

 */

 # include <stdio.h>

  # include <malloc.h>

  # define null 0

  typedef struct LNode

  {

 int data;

 struct LNode *next;

  }

  LNode,*linklist;

  linklist

 creatlist ()

 {

  LNode *p,*L;

 L=(LNode *)malloc(sizeof(LNode));

 L->next=null;

 L->data=0;

 while(1)

 {

  p=(LNode *)malloc(sizeof(LNode));

  scanf("%d",&p->data);

  if(p->data==-1) break;

  ++L->data;

  p->next=L->next;

  L->next=p;

  }

 return L;

 }

  void

 output(linklist L)

  {

  LNode *p;

  printf("the follow is Linklist data:\n")

 ;

 for(p=L->next;p!=null;p=p->next)

 printf("%5d",p->data);

  printf("\n the data is over.\n ");

  }

  void sort(linklist L)

 {

 linklist p,q;

 int i,j;

 for(i=1;i<L->data;i++)

  {

 for(j=0,p=L;j<L->data-i;j++)

  {

  if((p->next->data)>(p->next->next->data))

  {

  q=p->next;

  p->next=q->next;

  q->next=p->next->next;

  p->next->next=q;

  }

  p=p->next;

  }

  }

 }

  linklist Mergelist(linklist L1,linklist L2,linklist L3)

  {

 linklist p1,p2,p3;

 p1=L1->next;

 p2=L2->next;

 L3=p3=L1;

 while(p1&&p2)

  {

 if((p1->data)<=(p2->data))

 {p3->next=p1;p3=p1;p1=p1->next;}

 else {p3->next=p2;p3=p2;p2=p2->next;}

 }

 p3->next=p1?p1:p2;

 free(L2);

 return L3;

 }

  main()

  {

 linklist Lb;linklist La,Lc;

 La=creatlist();Lb=creatlist();

 sort(La);sort(Lb);

 output(La);output(Lb);

 Lc=Mergelist(La,Lb,Lc); output(Lc);

 getch();

  }

推荐访问:将两个链表合并成一个链表方法二 链表 合并 两个

Top