c - 了解排序链表

标签 c

我无法理解 C 语言中的排序链表。

我有以下代码:

void create(ListNode **pStart, int input)
{

    ListNode *pNew;
    ListNode *pPrevious;
    ListNode *pCurrent;

    pNew = malloc(sizeof(ListNode)); 

    if (pNew != NULL)
    {

        pNew->data = input;
        pNew->pNext = NULL;

        pPrevious = NULL;
        pCurrent = *pStart;

        while (pCurrent != NULL && input > pCurrent->data)
        {
            pPrevious = pCurrent;
            pCurrent = pCurrent->pNext;
        }

        if (pPrevious == NULL)
        {
            pNew->pNext = *pStart;
            *pStart = pNew;
        }
        else
        {
            pPrevious->pNext = pNew;
            pNew->pNext = pCurrent;
        }
    }
    else
    {
        printf("%c not inserted. No memory available.\n", input);
    }
    }

我很难理解上面写着 pCurrent = *pStart; 的部分。从技术上来说,pNew 不是第一个头节点吗? pCurrent = *pStart是什么?代表?

最佳答案

当调用 create 时,你必须区分 3 种情况:

  • 列表为空
  • 输入值小于或等于最小的现有元素 -> 它成为新的列表头
  • 输入值大于最小的现有元素 -> 将其插入列表中更远的位置

为了找到要插入的位置,代码从列表开始*pStart开始并继续,直到找到插入位置。

pNew 代表要插入的项目,与查找插入位置无关。

关于c - 了解排序链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35553808/

相关文章:

c - 在哪里可以找到 "more"命令的源代码?

创建文件,使用 lseek() 移动 1MB,然后将一个字节写入文件

c - 为什么我的编译器不断收到此 fatal error 代码? cab202_graphics.h:没有这样的文件或目录#include <cab202_graphics.h>

c - 我不明白这 tu[en-11] 行代码。访问结构成员到底是如何工作的?

c++ - 如何将 aurioTouch 文件添加到自定义程序?

c - 为什么返回自动(内部作用域)指针不好?

c - 在小型 C 程序中出现段错误

c - 支持扩展名的文件通配

c - 当我注释掉 printf 语句时,为什么会出现段错误

c - LoadRunner 中的负载分配