将两个升序排列的双链表合并成一个升序排列的双链表的函数,该如何解决
将两个升序排列的双链表合并成一个升序排列的双链表的函数
编写将两个升序排列的双链表合并成一个升序排列的双链表的函数,尽量重用原有的存储空间。双链表结构和函数定义如下,要求写出该合并函数的完整代码,注意程序风格。
typedef struct Node
{
int data;
struct Node *next, *prev;
}Node;
Node* merge(Node *first, Node *second)
{
}
------解决思路----------------------
typedef struct Node
{
int Index;
void * data;
struct Node * next, *prev;
}Node;
Node * merge(Node *first,Node* second)
{
Node * NodeNext,*NodePrev;
Node * Head,*WorkNode;
if(first->Index < second->Index)
{
Head=first;
first = first->next;
}
else
{
Head=second;
second = second->next;
}
WorkNode = Head;
Node * temp=NULL;
while(first!= NULL && second != NULL)
{
if(first->Index < second->Index)
temp = first;
else
temp = second;
WorkNode->next = temp;
temp->prev = WorkNode;
temp= temp->next;
WorkNode = WorkNode->next;
}
temp=NULL;
if(first==NULL)
temp = second;
else
temp = first;
while(temp)
{
WorkNode->next= temp;
temp->prev= WorkNode;
temp= temp->next;
WorkNode = WorkNode->next;
}
WorkNode->next = NULL;
return Head;
}
编写将两个升序排列的双链表合并成一个升序排列的双链表的函数,尽量重用原有的存储空间。双链表结构和函数定义如下,要求写出该合并函数的完整代码,注意程序风格。
typedef struct Node
{
int data;
struct Node *next, *prev;
}Node;
Node* merge(Node *first, Node *second)
{
}
------解决思路----------------------
typedef struct Node
{
int Index;
void * data;
struct Node * next, *prev;
}Node;
Node * merge(Node *first,Node* second)
{
Node * NodeNext,*NodePrev;
Node * Head,*WorkNode;
if(first->Index < second->Index)
{
Head=first;
first = first->next;
}
else
{
Head=second;
second = second->next;
}
WorkNode = Head;
Node * temp=NULL;
while(first!= NULL && second != NULL)
{
if(first->Index < second->Index)
temp = first;
else
temp = second;
WorkNode->next = temp;
temp->prev = WorkNode;
temp= temp->next;
WorkNode = WorkNode->next;
}
temp=NULL;
if(first==NULL)
temp = second;
else
temp = first;
while(temp)
{
WorkNode->next= temp;
temp->prev= WorkNode;
temp= temp->next;
WorkNode = WorkNode->next;
}
WorkNode->next = NULL;
return Head;
}