首页 > 其他分享 >问题--链表指针传参,修改next指针只传值

问题--链表指针传参,修改next指针只传值

时间:2023-07-26 18:34:36浏览次数:26  
标签:传参 head next 链表 new NULL 指针

1.问题--链表指针传参,修改next指针只传值

Link_creat_head(&head, p_new);//将新节点加入链表
在这当中head头指针传的是地址,而p_new传的是值,这二者有什么区别?

#include <stdio.h>
#include <stdlib,h>
//定义结点结构体
typedef struct student
{
    //数据域
    int num;
    //学号
    int score;
    //分数
    char name[20];/姓名
    
    //指针域
    struct student *next;
}STU;

void link_creat_head(STU **p_head,STU *p_new)
{
    STU *p_mov *p_head;
    if(*p_head==NULL)//当第一次加入链表为空时,head执行p_new
    {
        *p_head = p_new;
        p_new->next=NULL;   
	}
	else//第二次及以后加入链表
{
    while(p_mov->next!=NULL)
    {
        p_mov=p_mov->next;//找到原有链表的最后一个节点
        p_mov->next = p_new;
        //将新申请的节点加入链表
        p_new->next = NULL;
    }
}

int main()
{
		STU *head = NULL,*p_new = NULL;
 		int num, i;
		printf("请输入链表初始个数:\n");	
    	scanf("%d",&num);
        for(i = 0;i < num;i++)
        p_new=(STU*)malloc(sizeof(STU));//申请一个新节点
        printf("请输入学号、分数、名字:\n");//给新节点赋值
        scanf("%d %d %s",&p_new->num,&p_new->score,p_new->name);
        Link_creat_head(&head, p_new);//将新节点加入链表
	}
}

2.解决

二者的核心操作分别是:*p_head = p_new; p_new->next=NULL;

可以明显看到*p_head = p_new;一步中
p_head内部所存储的地址变成了p_new,里面存储的内容实实在在改变了,所以要传地址

而在p_new->next=NULL; 或写作(*(p_new).next = NULL;)更清楚,改变的是该指针所指向的存储区域中的值,该指针本身所存的地址还是该存储区域,并没有发生改变,所以仅仅传值即可

标签:传参,head,next,链表,new,NULL,指针
From: https://www.cnblogs.com/trmbh12/p/17583276.html

相关文章

  • 链表只有面试有用?Redis 之父说:我不同意
    几天前,Redis之父 SalvatoreSanfilippo(又名antirez)在Twitter上用Rust实现了一个糟糕的链表,引发了大家的讨论。在评论中,不少人觉得链表这种数据结构一无是处,于是几天后,antirez发了一篇博客。原文见:http://antirez.com/news/138antirez说:“从某些评论的语气中,我感觉到很多人......
  • C++使用指针进行地址传递及错误示范
    正确示范:voidchange(int*a,int*b){ inttemp=*a; *a=*b; *b=temp;}错误示范:voidchange(int*a,int*b){ int*temp=a; a=b; b=temp;} ......
  • cpp: 指针赋值
      char*pp=newchar[100]; chard[100]="geovindu,涂聚文"; stringddstr="geovindu,涂聚文"; char*dstr=nullptr; pp=d; dstr=&ddstr[0]; printf(dstr); printf(pp); printf("\n"); ......
  • 初识C数据结构之“*”和“&”(指针、解引用、取地址、引用)
    这天小阿杰又在看C数据结构——顺序表中几个传参的小小的内容引起了小阿杰大大的疑惑:(教材为严蔚敏老师的《数据结构(C语言版第2版)》)可怜的小阿杰当时只知道&取地址……后来查阅资料才对其中略知一二,那咱们下面就来唠唠。顺便提一下,引用&只在C++中有,C语言......
  • 链表的头插法(代码+内存图)
    头插法代码示例publicclassLinkDemo{publicstaticvoidmain(String[]args){//将这个数组按头插的方式插入列表int[]arr={1,2,3,4,5,6,7,8,9};headIndert(arr);}publicstaticvoidheadIndert(int[]arr){Nodeli......
  • 指针day1
    指针一:指针代码示例B站视频代码#include<stdio.h>intmain(){ inta=1025; int*p; p=&a; printf("sizeofintegeris%dbytes\n",sizeof(int)); printf("Address=%d,value=%d\n",p,*p); printf("Address=%d,value=%d\n&......
  • 链表中环的入口结点
    title:链表中环的入口结点date:2023-07-2511:57:00tags:-c/c++categories:-算法-笔试top:链表中环的入口结点题目来自acwing题目(点击跳转)给定一个链表,若其中包含环,则输出环的入口节点。若其中不包含环,则输出null。数据范围节点val值取值范围[1,1000]。节......
  • 题解 链表 (chain)
    题目链接首先考虑没有修改怎么做。两种做法。想到询问的形式为保留\(\gek\)的连通块个数,那么先将全部数字按照权值排序,然后从后往前做一遍并查集,并同时统计连通块的数量,在询问时只需二分找到第一个\(\gek\)的位置,将这个位置的答案输出即可。注意考虑答案为\(0\)的情况......
  • 运势计算:以双向链表实现: 解读运势
    1解读运势我们已经做了些什么?这一小节我们将能看到我们做了一些什么事情,还记得第一小节的链表查询函数吗?没错就是display,在第二小节中,我们将每次的爻变记录和爻值存入了链表,现在我们实现它以显示爻变的过程。///显示并返回链表的值func(this*dlist)display()[]int{......
  • antd 组件 select input cheeckboxGround 传参 自定义传参
    tempfunclog:......