插入单链表C

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

我明白为什么。 – 您正在设置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; } } }