插入单链表C

时间:2014-11-09 22:35:14

标签: c insert linked-list singly-linked-list

我在C

中链接列表fucntion前面的插入有问题
#define arrSIZE = 100;

struct listNode {
    char data[arrSIZE];
    struct listNode *nextPtr;
};

typedef struct listNode ListNode;

void insertHead(ListNode *sPtr, char value[arrSIZE]){
    ListNode *newPtr = (ListNode *)malloc(sizeof(ListNode));
    strncpy(newPtr->data, value, arrSIZE);
    if(sPtr ==NULL){
        newPtr->nextPtr=NULL;
        sPtr = newPtr;
    }else{
        newPtr->nextPtr=sPtr;
        sPtr =newPtr;
    }
}

1 个答案:

答案 0 :(得分:1)

我明白为什么。 - 您正在设置sPtr,但sPtr是一个局部变量,一旦退出insertHead就会消失。 相反,你会这样做:

#define arrSIZE = 100;

struct listNode
{
    char data[arrSIZE];
    struct listNode *nextPtr;
};

typedef struct listNode ListNode;

static ListNode *sPtr = NULL;

void insertHead(char value[arrSIZE])
{
    ListNode *newPtr = (ListNode *)malloc(sizeof(ListNode));
    strncpy(newPtr->data, value, arrSIZE);
    if(sPtr == NULL)
    {
        newPtr->nextPtr = NULL;
        sPtr = newPtr;
    }
    else
    {
        newPtr->nextPtr = sPtr;
        sPtr = newPtr;
    }
}

...因此,您现在只有一个链表。

另一方面,如果您想拥有多个链接列表,则需要添加另一个' *'关于论点:

void insertHead(ListNode **aIOPtr , char value[arrSIZE])
{
    if(aIOPtr)
    {
        ListNode *newPtr = (ListNode *)malloc(sizeof(ListNode));
        strncpy(newPtr->data, value, arrSIZE);
        if(*aIOPtr == NULL)
        {
            newPtr->nextPtr = NULL;
            *aIOPtr = newPtr;
        }
        else
        {
            newPtr->nextPtr = sPtr;
            *aIOPtr = newPtr;
        }
    }
}