创建链表节点结构
<span style="font-family:Microsoft YaHei;">typedef struct strNode
{
struct strNode* pNext;
DataType data;
}Node;
typedef struct strNode* PNode;</span>
链表的排序,在这里就是对于每个节点所存数字的比较。
<span style="font-family:Microsoft YaHei;">void Bubble_Pnode(PNode pHead)
{
PNode p1 = NULL;
PNode p2 = NULL;
assert(pHead);
if (pHead->pNext == NULL)
{
return pHead;
}
p1 = pHead;
while (p1 != NULL)
{
p2 = p1->pNext;
while (p2 != NULL)
{
if (p1->data > p2->data) //从小到大
{
DataType temp = p1->data;
p1->data = p2->data;
p2->data = temp;
}
p2 = p2->pNext;
}
p1 = p1->pNext;
}
}</span>
其实这里我采用了比较笨的办法,就是先链接两个链表,然后重新排序依次就好了。
<span style="font-family:Microsoft YaHei;">PNode merge_Node(PNode pHead1, PNode pHead2)//合并两个有序链表
{
PNode pH1 = pHead1;
PNode pH2 = pHead2;
PNode pphead = NULL;
assert(pHead1&&pHead2);
while (pH1->pNext != NULL)
{
pH1 = pH1->pNext;
}
pH1->pNext = pH2;
pphead = pHead1;
Bubble_Pnode(pphead);
return pphead;
}</span>
//修改:2016-10-3
node* Merge(node* phead1, node* phead2)
{
if (NULL == phead1)
return phead2;
else if (NULL == phead2)
return phead1;
node* pMergeHead = NULL;
if (phead1->data < phead2->data)
{
pMergeHead = phead1;
pMergeHead->next = Merge(phead1->next, phead2);
}
else
{
pMergeHead = phead2;
pMergeHead->next = Merge(phead1, phead2->next);
}
return pMergeHead;
}