2014-11-09 2 views
-1

У меня возникли проблемы с моей вставкой на переднюю части связанного списка fucntion в CВставка для Односвязного списка С

#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; 
    } 
} 
+2

Что, кажется, проблема? – Jawa

+0

инструкция else никогда не выполняется. – Megacardboard

+0

Добро пожаловать в Stack Overflow. Вскоре прочитайте страницу [О программе]. Это еще один из них, я не знаю, сколько дубликатов - основной вопрос задавался (и отвечал) много раз раньше. Теперь попробуйте найти хороший. –

ответ

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; 
     } 
    } 
} 
+1

спасибо, что это сработало! – Megacardboard

Смежные вопросы