鏈表的鏈接

最近在學苦逼的數據結構 ,牽涉到鏈表的算法 ,好多的內容不好想通,所以就採用分而破之的想法  一天學一點  !

今天就學習了鏈表的合併!

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

代碼的主要實現過程是這樣的:

(1)建立兩個不同的數組,並賦值。

(2)把數組的內容放在鏈表中。這牽涉到鏈表的創建。如果對鏈表創建有啥不明白的可以看我下面的幾篇文章 。是在我初學鏈表的時候做的鏈表的增刪查改!

 學生信息管理系統分析

http://blog.csdn.net/liuzuyi200/article/details/8562872

鏈表的反轉

http://blog.csdn.net/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;
 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章