我在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;
}
}
答案 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;
}
}
}