当我将节点插入头部时,它不起作用。但插入其他位置效果很好。
这是我的插入功能
int insert_before(ListNode *head, ListNode *p, int x){
ListNode *tmp, *cursor;
if(head == NULL || p == NULL) return -1;
if(head == p){
tmp = malloc(sizeof(ListNode));
tmp->val = x;
// insert node
tmp->next = p;
p = tmp;
printf("insert before: \n");
printList(head);
return 0;
}
cursor = head;
while(cursor->next != p && cursor->next != NULL ) cursor = cursor->next;
tmp = malloc(sizeof(ListNode));
tmp->val = x;
//insert node
tmp->next = p;
cursor->next = tmp;
printf("insert before: \n");
printList(head);
return 0;
}
我的主要功能
int main(){
ListNode *head, *tmp;
int x=0;
int arr[5] = {1,2,4,5,6};
head = createList(arr, 5);
printList(head);
tmp = get_by_index(head,3);
// insert
//insert_after(head, x);
insert_before(head, tmp, 100);
// insert_before(head, head, 100);
printf("in main: ");
printList(head);
printf("insert_before return %d \n", x);
return 0;
}
当我运行insert_before(head,tmp,x)时,它工作正常 , 当我运行insert_before(head,head,100); 它没有变化;
答案 0 :(得分:1)
插入到链表头部会替换它的头部,你不能用函数foo(node * head)来做。相反,你应该传递head指针的指针,这样函数就可以改变它。
答案 1 :(得分:0)
你必须稍微改变代码的语法,
int insert_before(ListNode **head, ListNode *p, int x)
我认为你得到了我在这里想说的话。