asf2013 2021-10-06 12:11 采纳率: 66.7%
浏览 63
已结题

关于头结点和头指针的学习问题


#include <stdio.h>
#include <stdlib.h>

typedef struct l
{
    int value;
    struct l* next;
 }Link;
 
//////////判空 
int Empty(const Link* Head)
{
    if(Head->next==NULL)return 0;
    else return 1;
}
//////////删除第i个节点
void Delete(Link *Head,int i)
{
    Link *q=Head;
    while(--i)//i=1时不执行,即q=Head;
    {
        q=q->next;
    }
    q->next=q->next->next;
}
/////////在第i个节点前插入 节点K 
void Insert(Link *Head,int i,Link *K)
{
    Link *q=Head;    
    while(--i)//i=1时不执行,即q=Head; 
    {
        q=q->next;
    }
    q->next=K;
    K->next=q->next;
}

关于链表的头结点作用问题,普遍共识是:
方便在第1个位置进行插入、删除操作时同其他位置一样。加了头结点之后,插入、删除都是在后继指针next上进行操作,不用动头指针;若不加头指针的话,在第1个位置插入或者删除第1个元素时,需要动的是头指针。
但是自己尝试性写了一下,发现似乎并不是这样,感觉似乎不设头结点也不用对第一个节点的插入和删除额外处理。我感觉应该是出了问题,但是自己一时没想明白哪里出了问题,望指正

  • 写回答

2条回答 默认 最新

  • 广大菜鸟 2021-10-06 13:35
    关注
    可以参考下我的代码
    https://blog.csdn.net/weixin_44001521/article/details/120623891
    

    然后题主的问题很明显

    例如这个函数内,
    void Insert(Link *Head,int i,Link *K)
    {
        Link *q=Head;    
        while(--i)//i=1时不执行,即q=Head; 
        {
            q=q->next;
        }
        q->next=K;
        K->next=q->next; (这个要和上面一句换位置)
    }
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月6日
  • 赞助了问题酬金 10月6日
  • 创建了问题 10月6日