链表的链接

最近在学苦逼的数据结构 ,牵涉到链表的算法 ,好多的内容不好想通,所以就采用分而破之的想法  一天学一点  !

今天就学习了链表的合并!

主要的算法思想就是:找到a链表的尾部 和b链表的头部链接在一起就可以了!

代码的主要实现过程是这样的:

(1)建立两个不同的数组,并赋值。

(2)把数组的内容放在链表中。这牵涉到链表的创建。如果对链表创建有啥不明白的可以看我下面的几篇文章 。是在我初学链表的时候做的链表的增删查改!

 学生信息管理系统分析

http://blog.youkuaiyun.com/liuzuyi200/article/details/8562872

链表的反转

http://blog.youkuaiyun.com/liuzuyi200/article/details/8948810

(3)把两个不同的链表连成一个链表。找到a链表的尾部 和b链表的头部链接在一起就可以了!我觉得这个实现还是比较简单的了!

(4)剩下的就是验证了 ,即输出合并后的链表 !

#include<stdio.h>
#include<stdlib.h>
struct llist
 {
  int num;
  struct List *next;
 };
typedef struct llist node;
typedef node *llink;
//链表内容的输出
void printllist(llink ptr)
{
   while( ptr  != NULL )
    {
       printf("%d",ptr->num);
       ptr =ptr->next;
    }
}
//链表的创建
llink createllist(int *array,int len)
 {
   llink head;
   llink ptr,ptr1;
    
    int  i;
     head =( llink )malloc( sizeof( node ));
      
         if(!head)
		return NULL;
      head->num =array[0];
      head->next =NULL;
      ptr= head;


        for(  i=1 ;i < len ; i++)
           {
           ptr1= ( llink )malloc( sizeof( node ));
             if( !ptr1)
                  return NULL;


           ptr1->num =array[i];
           ptr1->next =NULL;
           ptr->next=ptr1;
           ptr = ptr->next;


	   }
      return head;
 }


llink concatllist(llink ptr1,llink ptr2)
{
   //寻找到链表的最后一个结点   让a链表最后的一个结点的指针 指向b链表的头结点
   llink ptr;
    
   ptr= ptr1;


   while( ptr->next != NULL )
     {
           ptr = ptr->next;
      
      }
        ptr->next= ptr2;
     return ptr1;    
}




int main()
 {
     int llist1[6] = {1,2,3,4,5,6};
     int llist2[5] = {7,8,9,10,11};
        llink ptr,ptr1,ptr2;
 
    ptr1 =createllist(llist1,6);
        if( ptr1 == NULL )
            {
              printf("内存分配失败!\n");
		exit(1);
	    }
     ptr2=createllist(llist2,5);
        if( ptr2 == NULL )
            {
              printf("内存分配失败!\n");
		exit(1);
	    }
   ptr = concatllist(ptr1, ptr2);
   printllist(ptr);
   return 0;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值