合并有序排列的链表

来源:互联网 发布:js json转换对象数组 编辑:程序博客网 时间:2024/06/01 09:26
       近来,稍有闲暇,不知道该干些什么,设计模式复杂,枯燥,又没有具体的项目可以应对,还是练练思维,练练基础吧。哪天换工作说不定也用得上。就看了腾讯的面试题,有一个题目比较感兴趣,不过以现在的能力没有那么快写出来,所以才进去不了,不然去那里进修下,也是个不错的选择!题目就是:合并有序排列的链表。哈哈,能力有限,大家多多指正!代码如下:
#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;}

2 0
原创粉丝点击