面试中遇到了道题!合并两个有序链表
贴贴代码!
#include <iostream>
using namespace std;
struct linkNode
{
int element;
linkNode *next;
};
linkNode * getLink(linkNode *firstLink,linkNode *secondLink)
{
if(firstLink->element <= secondLink->element) {
linkNode * head = firstLink;
while(firstLink->element <= secondLink->element)
{
if(firstLink->next != NULL)
{
if(firstLink->next->element > secondLink->element)
{
linkNode * tmp = firstLink->next;
firstLink->next = secondLink;
secondLink = secondLink->next;
firstLink->next->next = tmp;
if(secondLink == NULL) {
break;
}
}
firstLink = firstLink->next;
}
else
{
firstLink->next = secondLink;
break;
}
}
return head;
}else {
return getLink(secondLink,firstLink);
}
}
void print(linkNode * node)//用于打印链表
{
while(node->next != NULL)
{
cout << node->element << " ";
node = node->next;
}
cout << node->element << "";
}
linkNode * buildLink(int array[],int size)
{
linkNode * link = new linkNode();
link->element = array[0];
linkNode * tmplink = link;
for(int i = 1 ; i < size ; i ++)
{
linkNode * tmp = new linkNode();
tmp->element = array[i];
tmplink->next = tmp;
tmplink = tmplink->next;
}
return link;
}
int main()
{
//初始化链表(有序)
int a [] = {1,4,5,10,10};
int b [] = {1,2,5,7};
linkNode * firstLink = buildLink(a,5);
linkNode * secondLink = buildLink(b,4);
//显示
print(firstLink);
cout << endl;
print(secondLink);
//合并
cout << endl;
linkNode *newLink = getLink(firstLink,secondLink);
print(newLink);
cout << endl;
return 0;
}