标签:ext 链表 删除链表 std value es2017 删除 htm sizeof
/*
**代码功能:创建一个令人头疼的不算头疼的链表,然后把特定的数据删除。
*这次的主题不是在代码上,主要是关于创建链表时候的传参问题,嘿嘿,不相信你没遇到过
*/
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>//要用到分配空间和释放空间
//定义一个链表结构
typedef struct link{
int value;
struct link *next;
}*LINK,linkInstance;
/**如果要传入参数创建链表的话。如下。
**创建:
**一,
void create(LINK <)等价void create(linkInstance *<) , 利用引用。 引用“lt”相当于实参的别名,对实参完全操控
调用在main函数中
LINK lt;
create(lt);
二,这种应该很熟悉
void create(linkInstance *lt)
调用在main函数中
linkInstance lt;
create(<);
结果是这样的:
:
***************************************错误写法***************************************************
**一种错误的写法是
void create(LINK lt)
调用在main函数中:
LINK lt;
create(lt);
为什么是错的,因为lt只是一个拷贝。
这就是你的结果:(哈哈哈哈)
**举个例子,
**void test(int a),上面的错误例子中的 lt 就相当于 a,这样上面那个也就明白了吧
**调用在main中
**int a;
**test(a);
**这就是。。。。。。不对滴。
*/
void create(LINK <){//初始化链表,注意“<”
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 <,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
*/
标签:ext 链表 删除链表 std value es2017 删除 htm sizeof
原文地址:http://www.cnblogs.com/zanzg/p/7794175.html