单链表之合并两个链表

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lixiaogang_theanswer/article/details/61197884

1.实现将两个带头结点的链表L1和L2进行连接,连接后的链表仍然使用原来的存储空间;结果为链表L2连接到L1的末尾。

思路:找到链表L1的尾节点,使其指针域指向下一个链表的头结点(同时将链表L2所占用的内存空间进行回收)。

合并之前
这里写图片描述

合并之后:
这里写图片描述

#include<stdlib.h>
#include <stdio.h>
typedef int ElemType;
typedef struct linknode
  {
  ElemType data;
  struct linknode *next;
  }LNode, *LinkList;

//创建链表
LinkList Create(void)
  {
  LinkList head,current;
  ElemType d;
  LNode *s;
  current=head=(LinkList)malloc (sizeof(LNode)); //head节点
  current->data=0;
  d=getchar();
  while (d!='\n')
    {
    s=(LinkList)malloc (sizeof(LNode)); //为新节点分配内存空间
    s->data=d; 
    current->next=s;
    current=s;
    d=getchar();
    }
  current->next=NULL;  //最后尾指针为NULL
  return head;
  }


//输出链表
void List(LinkList L)
  {
    LinkList p;
    p=L->next;  //
    while (p!=NULL)
      {
        printf ("%2c",p->data);
        p=p->next;
      }
  }


//合并链表
void CoalitionLinkList(LinkList L1,LinkList L2)
  {
     LinkList p;
     for(p=L1;p->next!=NULL;p=p->next)
       ;
     p->next=L2->next;
     free (L2);
  }

int main()
  {
  LinkList L1,L2;
  printf ("请输入第1个链表:\n");
  L1=Create ();
  printf ("\n请输入第2个链表:\n");
  L2=Create ();
  CoalitionLinkList (L1,L2);
  printf ("合并后的链表为:\n");
  List (L1); 
  system ("pause");
  return 0;
  }

展开阅读全文

没有更多推荐了,返回首页