首页 > 其他 > 详细

合并有序排列的链表

时间:2014-03-05 18:55:07      阅读:496      评论:0      收藏:0      [点我收藏+]
       近来,稍有闲暇,不知道该干些什么,设计模式复杂,枯燥,又没有具体的项目可以应对,还是练练思维,练练基础吧。哪天换工作说不定也用得上。就看了腾讯的面试题,有一个题目比较感兴趣,不过以现在的能力没有那么快写出来,所以才进去不了,不然去那里进修下,也是个不错的选择!题目就是:合并有序排列的链表。哈哈,能力有限,大家多多指正!代码如下:
#include "stdafx.h"
#include<iostream> 
using namespace std; 

typedef struct Node
{
    int number;
    
    struct Node* next;
}Node,*LinkList;

bool init_linkList(LinkList* list)
{
    *list = (LinkList)malloc(sizeof(Node));
	(*list)->next = NULL;
   return true;
}

bool createList(LinkList* list,int num,int elem[])
{

    Node* pfirst = *list;
    int li_loop = 0;
	Node* snode;

	while (li_loop < num)
	{
       snode =  (Node*)malloc(sizeof(Node));
	   snode->number = elem[li_loop];
	   snode->next = NULL;
      
	   pfirst->next = snode;
	   pfirst = pfirst->next;
  
	   li_loop++;
	}

    return true;
}

void printList(LinkList* list)
{
   Node* pnode = (*list)->next;
   while (pnode!=NULL)
   {
      printf("list node value=%d\n",pnode->number);

	  pnode = pnode->next;
   }
    
}

bool destroyList(LinkList* list)
{
    Node* pNode = *list;
    Node* pre = *list;
	int count = 0;

	while(pre->next!=NULL)
	{    
		
		 pNode = pre;
		 pre = pre->next;
	     free(pNode);
		
		 pNode = NULL;	 
		 count++;	
		 
	}
    
	if (pre!=NULL)
	{
		free(pre);
	    pre = NULL;
		count++;
	}
    
	printf("release memory count=%d\n",count);

    return true;
}


bool mergeList(LinkList* alist,LinkList* blist)
{
    Node* p;
 
	Node* pre;

	Node* pbHead = *blist; 

	p = *alist;

	pre = *alist;

	Node* pa = (*alist)->next;

	Node* pb = (*blist)->next;

	while(pa&&pb)
	{
	   //blist表节点和入alist
	   if (pa->number > pb->number)
	   {
	       pre->next = pb;
		   pb = pb->next;
		   pre = pre->next;
		   pre->next = pa;
	   }
	   else
	   {
	       pre = pa;
		   pa = pa->next;
	   }
	
	}
    
	pre->next = pa ? pa:pb;
    
	//清空另外一个节点的头节点
	if (pbHead!=NULL)
	{
	    free(pbHead);
		pbHead->next = NULL;
	
	}

    return true;
}

//
int main()
{

   LinkList al;LinkList bl;
   
   //初始化链表
   init_linkList(&al);

   init_linkList(&bl);

   int a[6]={2,2,3,5,7,9};
   int b[5]={1,4,6,8,10};
   
   //创建2个链表
   createList(&al,6,a);
   createList(&bl,5,b);
   
   //打印2个链表
   printList(&al);

   printList(&bl);
   
   //合并有序报表
   mergeList(&al,&bl);

   printList(&al);
   
   //释放内存
   destroyList(&al);
   return 1;
}

合并有序排列的链表,布布扣,bubuko.com

合并有序排列的链表

原文:http://blog.csdn.net/cancan8538/article/details/20550087

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!