/*

**代码功能:创建一个令人头疼的不算头疼的链表,然后把特定的数据删除。

*这次的主题不是在代码上,主要是关于创建链表时候的传参问题,嘿嘿,不相信你没遇到过

*/
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>//要用到分配空间和释放空间
//定义一个链表结构
typedef struct link{
int value;
struct link *next;
}*LINK,linkInstance;

/**如果要传入参数创建链表的话。如下。
**创建:
**一,
void create(LINK &lt)等价void create(linkInstance *&lt) , 利用引用。 引用“lt”相当于实参的别名,对实参完全操控
调用在main函数中
LINK lt;
create(lt);
二,这种应该很熟悉
void create(linkInstance *lt)
调用在main函数中
linkInstance lt;
create(&lt);

结果是这样的:

***************************************错误写法***************************************************
**一种错误的写法是
void create(LINK lt)
调用在main函数中:
LINK lt;
create(lt);
为什么是错的,因为lt只是一个拷贝。

这就是你的结果:(哈哈哈哈)


**举个例子,
**void test(int a),上面的错误例子中的 lt 就相当于 a,这样上面那个也就明白了吧
**调用在main中
**int a;
**test(a);
**这就是。。。。。。不对滴。
*/

void create(LINK &lt){//初始化链表,注意“&lt”
LINK temp,current;//temp临时空间,用于添加节点
lt = (LINK)malloc(sizeof(struct link));//创建一个头节点
lt->next = NULL;//清空头节点
current = lt;
int value;
printf("输入数据");
//创建节点
for (int i = 0; i < 4; i++){
temp = (LINK)malloc(sizeof(struct link));
if (temp == NULL){
printf("分配空间失败");
exit(0);
}//ifEnd
scanf_s("%d", &value);
temp->value = value;
current->next = temp;
current = current->next;
}//forEnd
temp->next = NULL;//收尾,谁知道你得到的空间里面有什么。
}

void del(LINK &lt,int val){//删除链表元素
LINK forth=lt;//保存前一个元素,要用的滴下面
LINK current=lt->next;
while (current != NULL){
if (current->value == val){
forth->next = current->next;//上一个元素指向下一个元素,跳过中间的forth , current(forth->next) , current->next
free(current);//释放掉当前空间
}
else{
forth = current;
}
current = forth->next;//指向下一个元素,上面替换掉了。
}//whileEnd
}
void printLink(LINK lt){//打印
LINK L = lt->next;
while (L){
printf("%d\t", L->value);
L = L->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LINK lt;
create(lt);//创建,lt是头节点,头节点不保存数据
del(lt,3);//删除所有的3这个元素,从链表。
printLink(lt);//打印
getchar();
return 0;
}

/*
这是一个作者写的关于引用的详细讲解:http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html
*/

c++的引用和c的指针之创建链表,二叉树的烦恼和区别的更多相关文章

  1. 指针的引用(*&)与指针的指针(**)

    指针的引用(*&)与指针的指针(**) 在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildi ...

  2. Java的引用和C++的指针de区别

    Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对内存数据的操作,就好像风筝的线轴一样,通过线轴总是能够找到风筝,但是它们在实现,原理作用等方面却有区别. (1)类型:引用其值 ...

  3. Linus:利用二级指针删除单向链表

    Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...

  4. 【转】Linus:利用二级指针删除单向链表

    原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...

  5. 复制带有random指针的单链表

    如图1所示,有一条单链表,其节点除了有next指针外,还有一个random指针.random指针可指向单链表中的任意节点,包括它自身.random指针一旦指定,便不再更改.请设计算法,复制此单链表,并 ...

  6. 转:Linus:利用二级指针删除单向链表

    感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是 ...

  7. C语言中指针*p[N], (*P)[N],及**p的区别

    在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: ...

  8. [转载]EXCEL绝对引用中$A$1、A$1、$A1三个的区别?

    转自:https://zhidao.baidu.com/question/167695289.html EXCEL绝对引用中$A$1.A$1.$A1三个的区别? 符号“$”加在不地方的含义有何不同? ...

  9. 40深入理解C指针之---指针与单链表

    一.指针与单链表 1.定义:通过使用指针将节点(结点)链接起来成为链表 2.节点(结点): 1).数据域:主要用来存储数据,可以基本数据类型,也可以是构造数据类型: 2).指针域:主要用来当前节点(结 ...

随机推荐

  1. Babel运行原理

    前言     之前翻博客园的时候,看到有人朋友分享阿里巴巴的面试题,其中有一道题就是关于ES6转ES5 原理的,当时我看到感觉到自己离去阿里巴巴的路还很远啊,像我们大部分做开发的时候,都只知其然不知 ...

  2. 详解变量声明加 var 和不加 var 的区别

    在全局作用域中声明变量加 var 关键字和不加 var ,js 引擎都会将这个变量声明为全局变量,在实际运行时,两种声明方式的变量的行为也是几乎一致的.但是在全局作用域下是否声明一个变量的 时候加va ...

  3. 242. Valid Anagram(leetcode)

    Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = & ...

  4. JAVA基础知识总结:七

    一.面向对象编程 1.什么是面向对象? 万物皆对象 案例一:我想吃大盘鸡 面向过程 面向对象 1.我自己去买一只鸡 1.委托一个会砍价的人去帮忙买鸡 2.我自己宰鸡 2.委托一个胆大的人宰鸡 3.我自 ...

  5. Unity3D手机斗地主游戏开发实战(01)_发牌功能实现

    园子荒废多年,闲来无事,用Unity3D来尝试做一个简单的小游戏,一方面是对最近研究的Unity3D有点总结,一方面跟广大的园友相互学习和提高.话不多说,进入正题~ 一.创建项目 1.创建Unity2 ...

  6. 微信小程序用setData修改数组或对象中的一个属性值

    在page中有如下数组 data: { info:[ { name:"yuki", tou:"../img/head.jpg", zGong:130, gMon ...

  7. Android Studio 中修改Apk名称

    修改生成的apk名称,并且使调试时也可以使用. 在app->build.gradle 中增加以下内容: android.applicationVariants.all { variant-> ...

  8. Linux库函数制作(静态库、动态库)

    Linux库函数制作(静态库.动态库) 静态库与动态库 链接方式 链接分为两种:静态链接.动态链接 静态链接: 由链接器在链接时将库的内容加入到可执行程序中 静态链接的特点是: 优点: 对运行环境的依 ...

  9. dp百题大过关(第一场)

    好吧,这名字真是让我想起了某段被某教科书支配的历史.....各种DP题层出不穷,不过终于做完了orz 虽然各种手糊加乱搞,但还是要总结一下. T1 Monkey Banana Problem    这 ...

  10. Android 开发笔记___图像视图__简单截屏

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...