首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >轻松合并2个链表

轻松合并2个链表
EN

Stack Overflow用户
提问于 2019-01-14 22:04:08
回答 1查看 73关注 0票数 0

我正在尝试写一个函数,它将合并2个链表,并返回合并后的列表。我做到了,但我不得不使用lastPtr。问题是,最后一次while循环迭代创建了一个不必要的节点。因此,问题是我如何删除无用的lastPtr

下面是代码:

代码语言:javascript
复制
NodePtr merge(NodePtr s1, NodePtr s2)
{
    NodePtr s3, currPtr, lastPtr;
    s3 = malloc(sizeof(Node));
    currPtr = s3;

    while(s1 != NULL){
        currPtr->ch = s1->ch;
        currPtr->nextPtr = malloc(sizeof(Node));
        currPtr = currPtr->nextPtr;
        s1 = s1->nextPtr;
    }

    while(s2 != NULL){
        lastPtr = currPtr;
        currPtr->ch = s2->ch;
        currPtr->nextPtr = malloc(sizeof(Node));
        currPtr = currPtr->nextPtr;
        s2 = s2->nextPtr;
    }

    lastPtr->nextPtr = NULL;
    return s3;
}
EN

回答 1

Stack Overflow用户

发布于 2019-01-15 00:02:26

您可以通过使用Node ** (或NodePtr *)变量指向lastPtr链接来删除->nextPtr。它还可以指向列表变量s3的头部。这允许在没有创建列表的第一个元素的特殊情况下实现代码:

代码语言:javascript
复制
NodePtr merge(NodePtr s1, NodePtr s2)
{
    NodePtr s3 = NULL;
    NodePtr *currPtrPtr = &s3;

    while(s1 != NULL){
        *currPtrPtr = malloc(sizeof(Node));
        (*currPtrPtr)->ch = s1->ch;
        currPtrPtr = &(*currPtrPtr)->nextPtr;
        s1 = s1->nextPtr;
    }

    while(s2 != NULL){
        *currPtrPtr = malloc(sizeof(Node));
        (*currPtrPtr)->ch = s2->ch;
        currPtrPtr = &(*currPtrPtr)->nextPtr;
        s2 = s2->nextPtr;
    }

    *currPtrPtr = NULL;
    return s3;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54183018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档