您的位置: 题酷首页 » 所有题目 » 两个有序链表的合并


两个有序链表的合并


0
1
2 答
4k 看

有两个有序链表,各自内部是有序的,但是两个链表之间是无序的

Merge: 1. 写一个Merge函数 2. 如果两个有序链表交叉呢?

作业题链表
2009/08/20 by 半瓶墨水 9个月前更新 更新记录

1 @半瓶墨水: 看了那个题目才明白。所谓的交叉是“交”而不“叉”……leaveye, 2年前
嘿。。链表如何交叉……leaveye, 2年前
@leaveye: 仔细想想就知道了半瓶墨水, 2年前
@半瓶墨水: 链表中的一个 node 怎可能有两个 link 域呢。。leaveye, 2年前
@leaveye: 再想想,想不通就搜搜链表题目,站内有的半瓶墨水, 2年前
| 显示所有评论(还有1个)


0

合并有序单链表。

struct node{
int data;
node* next;
 };
 typedef node* List;
 List mergeSortedLinkList(List &list1, List &list2)
 {
if (list1 == NULL)
{
    return list2;
}
if (list2 == NULL)
{
    return list1;
}
List pList1 = list1;
List pList2 = list2;
List mergedList = NULL;
if (pList1->data <= pList2->data)
{
    mergedList = pList1;
    pList1 = pList1->next;
}
else
{
    mergedList = pList2;
    pList2 = pList2->next;
}
List pCurNode = mergedList;
while(pList1 && pList2)
{
    if (pList1->data <= pList2->data)
    {
        pCurNode->next = pList1;
        pCurNode = pList1;
        pList1 = pList1->next;
    }
    else
    {
        pCurNode->next = pList2;
        pCurNode = pList2;
        pList2 = pList2->next;
    }
}

if (pList1 != NULL)
{
    pCurNode->next = pList1;
}
if (pList2 != NULL)
{
    pCurNode->next = pList2;
}

return mergedList;
 }
整体代码一定要选中以后Ctrl+K啊,否则没有高亮,帮你改了半瓶墨水, 2年前
谢谢,还有我发现一个问题,我每次粘贴代码的时候格式怎么老乱呢。Haitao, 2年前
缩进,一定要有缩进半瓶墨水, 2年前
3 另外“pCurNode->next = pList1;”,这句有问题。还有当链表相交的时候也有问题。半瓶墨水, 2年前
类似合并排序的思想。listar, 9个月前
0

代码我就基于Haitao的来了。 其中VC报错的地方我给修改了。(其实“pCurNode->next = pList1;”这句是没有问题的) 关于交叉也处理了。 以下代码可以通过VC6编译。

typedef struct node{
    int data;
    struct node * next;
}* List;

List mergeSortedLinkList(List list1, List list2)
{
    List pList1,pList2,mergedList,pCurNode;

    if (list1 == NULL)
    {
        return list2;
    }
    if (list2 == NULL)
    {
        return list1;
    }

    pList1 = list1;
    pList2 = list2;
    mergedList = NULL;
    if (pList1==pList2)
    {       
        mergedList = pList1;
        pList1 = pList1->next;
        pList2 = pList2->next;
    }
    else 
    {
        if (pList1->data <= pList2->data)
        {
            mergedList = pList1;
            pList1 = pList1->next;
        }
        else
        {
            mergedList = pList2;
            pList2 = pList2->next;
        }
    }
    pCurNode = mergedList;
    while(pList1 && pList2)
    {
        if (pList1==pList2)
        {
            pCurNode->next = pList1;
            pCurNode = pList1;
            pList1 = pList1->next;
            pList2 = pList2->next;
        }
        else
        {
            if (pList1->data <= pList2->data)
            {
                pCurNode->next = pList1;
                pCurNode = pList1;
                pList1 = pList1->next;
            }
            else
            {
                pCurNode->next = pList2;
                pCurNode = pList2;
                pList2 = pList2->next;
            }
        }
    }

    pCurNode->next =pList1?pList1:pList2;

    return mergedList;
}

250x

参与回答

 提示:如不是回答问题,请采用发表评论形式! (比如针对题目或者某个回复的意见、建议)

注册登录后再回答