You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链表节点按条件迁移:splitList函数实现求助

链表拆分函数splitList实现求助

我被这个问题卡了好几天,急需帮忙实现splitList函数。这个函数的功能是:把原链表中满足条件的节点移除并迁移到新链表,仅当当前节点的前一个节点和后一个节点都小于它时才进行迁移。

注意事项

  • 若第一个节点被移除,原链表的头指针需要更新
  • 第一个节点大于下一个节点时,将其移除并迁移至新链表
  • 最后一个节点大于前一个节点时,将其移除并迁移至新链表
  • 原链表仅有一个节点时,直接将其移除并迁移至新链表
  • 原链表可以是空链表

示例

原链表:3->6->1->9->8->4->5
迁移后的新链表:6->9->5
删除后的原链表:3->1->8->4

已实现的辅助函数

我已经写好几个必须用到的辅助函数,代码如下:

int deleteFirst(list **lst) // 不需要使用返回值,但链表为空时必须返回0,否则返回1
{
    // 实现代码:
    list *delNode = *lst;
    if (delNode == NULL)
    {
        printf("List is empty...\n");
        return 0;
    }
    else
    {
        *lst = (*lst)->next;
        delNode->next = NULL;
    }
    return 1;
}

int deleteAfter(list *curr) // 同样不需要使用返回值,但curr为空或指向最后一个节点时返回0,否则返回1
{
    // 实现代码:
    if (curr == NULL)
    {
        return 0;
    }
    else
    {
        list *delItem = curr->next;
        curr->next = delItem->next;
        delItem->next = NULL; 
    }
    return 1;
}

void freeList(list **lst)
{
    // 实现代码:
    while (*lst)
    {
        deleteFirst(lst);
    }
}

我的问题与当前代码

现在我卡在splitList函数的实现上,尝试用prev和curr两个指针,但处理不好节点迁移后的链表连接问题。会不会不需要真正删除节点,直接做迁移就行?我目前写的splitList代码如下:

int splitList(list **lst, list **new)
{
    // 实现代码:
    int counter = 0;
    list *prev, *curr, *currNew;

    // 原链表为空的情况
    if (*lst == NULL)
    {
        printf("Original list is empty...\n");
        return counter;
    }

    prev = NULL;
    curr = *lst;

    while (curr->next != NULL)
    {
        if (prev == NULL && curr->data > curr->next->data) // 第一个元素大于下一个元素的情况
        {
            deleteFirst(lst);

            if (*new == NULL) // 新链表为空的情况
            {
                *new = curr;
            }
            else
            {
                currNew = *new;

                while (currNew->next != NULL)
                {
                    currNew = currNew->next;
                }
                currNew->next = curr;
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者ezra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:00:28