2016-04-14 72 views
-3

我想从列表中的给定位置删除节点, 但我的删除功能不起作用。 请帮我一把。从链表中的给定位置删除节点

在此先感谢。

Node* Delete(Node *head, int position) 
{ 
    int count=0; 
    Node* temp, *temp1, *temp2; 
    temp = head ; 
if(head==NULL){ 
    return 0; 
    } 
else if(position == 0) 
    { 

    head = head->next; 
    free(temp); 
    return head; 
} 
    else{ 
     while(count!= position-1) 
     { 
     temp = temp->next; 
     count++; 
    } 
    temp1 = temp->next; 
    temp->next = temp1->next; 

    free(temp1); 
    return temp; 
} 

return head; 
} 
+0

*如何*它不工作?你有构建错误吗?崩溃?你有没有试过在调试器中运行?逐行浏览代码以查看它错误的位置? –

+0

请定义所需的行为。回报值应该是多少? – MikeCAT

+2

我的猜测:'return temp;'应该被移除。 – MikeCAT

回答

1

替换return temp;return head; 另外包括逻辑来处理,如果有节点小于位置。

3

首先,正确地设置你的代码的格式。

然后,删除return temp;,以便列表的前半部分不会丢失。

您也可以先删除return head;,因为函数在最后一部分将会执行return head;

Node* Delete(Node *head, int position) 
{ 
    int count=0; 
    Node *temp, *temp1, *temp2; 
    temp = head; 
    if(head==NULL){ 
    return NULL; 
    } 
    else if(position == 0) 
    { 
    head = head->next; 
    free(temp); 
    } 
    else{ 
    while(count!= position-1) 
    { 
     temp = temp->next; 
     count++; 
    } 
    temp1 = temp->next; 
    temp->next = temp1->next; 

    free(temp1); 
    } 

    return head; 
} 

注意return 0;是有效的,因为0是一个空指针常量(N1256 6.3.2.3指针),并将其转换为指针的定义,但使用NULL是更好,因为它会使明确表示,它正在处理用指针。

1

我只想添加到MikeCAT的答案。当节点数量少于该位置时,您还应该处理该情况。

一个这样做可能的方式:

while(count!= position-1) { temp = temp->next; if(temp == NULL) return head; count++; }

0

删除return tempreturn head。 此外,如果位置大于链接列表中的节点数,请检查条件。 也释放指针之前,我会建议添加temp1->next=NULL,然后free(temp1)