/*
* test.c
*
* Created on: 2013年10月8日
* Author: lxm2527
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct list
{
int data;
struct list* next;
}LIST;
/*
* @函数名 :Display
* @brief:打印链表
* @return:int
* @param:LIST* pkTemp
* @remark:
*
*/
int Display(LIST *pkTemp)
{
while(pkTemp)
{
printf("%d ",pkTemp->data);
pkTemp = pkTemp->next;
}
printf("\n");
return 0;
}
/*
* @函数名 :CreateList
* @brief:创建新链表
* @return:LIST*
* @param:int nArray[]
* @param:int len
* @remark:
*
*/
LIST* CreateList(int nArray[],int len)
{
LIST* pkHead = NULL,*pkTail = NULL;
LIST* pkTemp = NULL;
int i;
for(i = 0;i < len;i++)
{
pkTemp = malloc(sizeof(LIST));
pkTemp->data = nArray[i];
pkTemp->next = NULL;
if(pkHead == NULL)
{
pkHead = pkTemp;
pkTail = pkHead;
}
else
{
pkTail->next = pkTemp;
pkTail = pkTemp;
}
}
return pkHead;
}
/*
* @函数名 :Sort
* @brief:把两个有序的链表合成一个有序的链表
* @return:LIST*
* @param:LIST* pkOne
* @param:LIST* pkTwo
* @remark:
*
*/
LIST* Sort(LIST* pkOne,LIST* pkTwo)
{
LIST* pkHead = NULL,*pkTail = NULL;
LIST* pkTemp = NULL;
while(NULL != pkOne && NULL != pkTwo)
{
if(pkOne->data < pkTwo->data)
{
pkTemp = malloc(sizeof(LIST));
if(NULL == pkTemp)
{
return NULL;
}
pkTemp->data = pkOne->data;
pkTemp->next = NULL;
if(pkHead == NULL)
{
pkHead = pkTemp;
pkTail = pkHead;
}
else
{
pkTail->next = pkTemp;
pkTail = pkTemp;
}
pkOne = pkOne->next;
}
else
{
pkTemp = malloc(sizeof(LIST));
if(NULL == pkTemp)
{
return NULL;
}
pkTemp->data = pkTwo->data;
pkTemp->next = NULL;
if(pkHead == NULL)
{
pkHead = pkTemp;
pkTail = pkHead;
}
else
{
pkTail->next = pkTemp;
pkTail = pkTemp;
}
pkTwo = pkTwo->next;
}
}
//如果链表一还没有结束
while(NULL != pkOne)
{
pkTemp = malloc(sizeof(LIST));
if(NULL == pkTemp)
{
return NULL;
}
pkTemp->data = pkOne->data;
pkTemp->next = NULL;
pkTail->next = pkTemp;
pkTail = pkTemp;
pkOne = pkOne->next;
}
//如果链表二还没有结束
while(NULL != pkTwo)
{
pkTemp = malloc(sizeof(LIST));
if(NULL == pkTemp)
{
return NULL;
}
pkTemp->data = pkTwo->data;
pkTemp->next = NULL;
pkTail->next = pkTemp;
pkTail = pkTemp;
pkTwo = pkTwo->next;
}
pkTemp = pkHead;
return pkTemp;
}
int main()
{
int nArray[] = {-5,1,4,7,8,11,14,15,21,24};
int nArray2[] = {-2,-3,7,9,14,17,23,25,29,33};
int len = sizeof(nArray)/sizeof(nArray[0]);
int len2 = sizeof(nArray2)/sizeof(nArray2[0]);
LIST* pkTemp = CreateList(nArray,len);
Display(pkTemp);
LIST* pkTemp2 = CreateList(nArray2,len2);
Display(pkTemp2);
LIST* pkTemp3 = Sort(pkTemp, pkTemp2);
Display(pkTemp3);
return 0;
}
合并两个有序链表形成一个新的有序链表
最新推荐文章于 2020-07-12 08:49:49 发布