为什么我得到越界错误在这个链表?C

  • 本文关键字:链表 错误 越界 linked-list
  • 更新时间 :
  • 英文 :


所以我做一个链表。把它打印出来。然后逆转它。然后打印出来。我第一次制作并打印出来。一切正常。但当我把它倒过来。它成功地反转了。但是当我打印出来的时候。我越界了,尽管我使用的代码和第一次一样。

这是反向函数

void reverse_list(Node_ptr* head){
Node_ptr temp2;
Node_ptr temp3 = NULL;
temp2 = (Node_ptr)malloc(sizeof(Node));
temp3 = (Node_ptr)malloc(sizeof(Node));
if (temp2==NULL || temp3==NULL)
{
    printf("Failed to allocate noden");
    exit(1);
}
while (*head!=NULL) {
     temp2 = (*head)->next;
    (*head)->next = temp3;
    temp3 = (*head);
    (*head) = temp2;
}
 *head = temp3;

}

下面是打印函数
temp = head;
while (temp != NULL)
{
    printf("%dn", temp->data);
    temp = temp->next;
}
reverse_list(&head);
temp = head;
while (temp != NULL)
{
    printf("%dn", temp->data);
    temp = temp->next;
}

由于某种原因,它试图在最后一个元素

之后打印垃圾

这样做:

/* Function to reverse the linked list */
void reverse(struct node** head_ref)
{
    struct node* prev   = NULL;
    struct node* current = *head_ref;
    struct node* next;
    while (current != NULL)
    {
        next  = current->next;  
        current->next = prev;   
        prev = current;
        current = next;
    }
    *head_ref = prev;
}

它实际上是你的代码与几个固定装置,即:

1)你不需要分配空间,只需要交换指针。

为你的临时容器使用有意义的名字。

第一次执行循环

while (*head!=NULL) {
     temp2 = (*head)->next;
    (*head)->next = temp3;
    temp3 = (*head);
    (*head) = temp2;
}

(*head)->next被分配一个新分配的节点。谁知道这个节点包含什么?它可能不会被归零,并且将指向内存中的随机点。

你应该初始化temp3为NULL来解决这个问题。

相关内容

  • 没有找到相关文章

最新更新