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日

悬赏问题

  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题
  • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误
  • ¥40 想找个软件,但我不知道怎么找到它,我甚至不知道有没有
  • ¥15 怎么把60秒的视频时长改成显示0秒?且视频内容没有任何变化的正常播放?目的是为了解决一些平台对视频时长的要求,最好有自动处理的工具!