Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        3年前关闭。
                                                                                            
                
        
我无法理解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种情况:


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


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

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

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

10-11 16:03