c - 仅删除链表中最后一个节点旁边的不存在的节点会终止程序

标签 c linked-list singly-linked-list

当我删除链接列表中存在的任何节点时,我的代码可以完美运行。 假设我的链表有 10 个节点,如果我想删除第 12 个、第 13 个、第 14 个……节点,我的程序会给出预期的消息。

但是如果我想删除第11节点(与最后一个节点相邻),我的程序将终止并退出代码-1073741819 (0xC0000005)

int delete()
{
    int position, count = 1;
    printf( "\nwrite your position" );
    scanf( "%d", &position );

    struct node *p, *q;
    p = head;
    if ( position == 0 ) {
        p = p->next;
        head = p;
        return 0;
    }
    while ( p != NULL && count != position ) {
        count++;
        p = p->next;
    }
    count = 0;
    if ( p == NULL ) {
        printf( "link list is empty or link not found\n" );
        return 0;
    }
    else {
        q = p->next;
        p->next = q->next;
    }
}

最佳答案

when i delete qny node present in a linked list my code works perfect

不,事实并非如此。它看起来适合删除索引 0 处的节点,但对于任何其他正索引 n,它会尝试通过前进指针 来删除索引 n+1 处的节点p 指向节点n,然后操作p->next

but if i want to delete 11th node(which is adjacent to last node) ,my program terminates with exit code -1073741819 (0xC0000005)

我不相信这一点,但我相信当您尝试删除最后节点(而不是最后一个节点)时,程序会失败。在这种情况下,p 前进到指向最后一个节点,其 next 指针为空。因此这段代码:

    q=p->next;
    p->next=q->next;

q 设置为空指针,然后尝试取消引用该指针。

关于c - 仅删除链表中最后一个节点旁边的不存在的节点会终止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59344407/

相关文章:

c++ - WinSock 2.2 TCP/IPv4 send() 总是返回发送的所有字节

c - 如何使用 Poppler 缩放

c - 为什么这段链表有序插入代码在 GCC CEntos 中不起作用?

c - 在链表中,最后一个节点->下一个不为NULL,导致段错误

c++ - 在 C 中包装 C++ 成员函数 - Visual Studio 2013 模板问题

ios - 迭代包含 "Extended ASCII"个字符的 const unsigned char *

java - 我无法弄清楚这个 ConcurrentModificationException

c - 为什么当值按升序排列时链接列表函数会崩溃?

c - 这个链表删除尾节点函数有什么问题?

c++ - 如何从链表中删除中间节点