学习 单链表 总结二
2015-09-14 23:40
232 查看
学习 单链表 总结二
—-单链表的头结点、头指针及单链表的初始化等头结点与头指针
头结点即第一个结点,头指针是指向第一个结点的指针. 在单链表中,可以没有头结点,但是不能没有头指针.
下面是头结点与头指针的关系:
// 定义结点的结构体 typedef struct Node { int data; struct Node* next; }Node, *LinkList;
那么若定义:
LinkList L;
则L为链表的头指针.
// 创建一个结点 L = (LinkList)malloc(sizeof(struct Node));
这时,L返回一个指针,并且赋给了头指针.
单链表的初始化
带头结点初始化
用上面的结构体定义. 直接代码如下:// 声明头结点 Node* head; // 带头结点初始化 void InitList(Node** head) { *head = (Node*)malloc(sizeof(Node)); (*head)->next = NULL; }
不带头结点初始化
方法一:// 声明头结点 Node* head; void InitList(Node** head) { *head = NULL; }
方法二:
// 声明头结点 Node* head; void InitList(Node* head) { head = NULL; }
为什么带头结点单链表的初始化只有一种方式?
因为不带头结点声明Node *head 时,C编译器将其自动初始化为NULL,于是根本不需要调用InitList(head); 也即不带头结点的初始化是个伪操作。而带头结点的初始化在堆开辟了一段内存,需要修改head指针变量指向的地址(即head的值),所以要修改head的值,必须传保存head变量的地址(即二维指针)。而直接调用CreatList(head);相当于传head变量的值,函数修改的是head的副本,无法真正改变head的值。这其实本质上还是传值,传址的问题,只不过指针本身保存的地址,让这个过程变得有点纠结。在函数调用需要修改指针变量的指向(value)时,应该传递指针变量的地址(address)。
单链表的创建
带头结点的创建
void CreatList(Node** head) { Node* phead = *head; Node* CurrentNode; int InputValue; while (scanf("%d", &a)) { if (0 != a) { CurrentNode = (Node*)malloc(sizeof(Node)); CurrentNode->value = a; phead->next = CurrentNode; phead = CurrentNode; } } }
不带头结点的创建
不带头结点的初始化,第一个结点与其他结点的处理要分开!void CreatList(Node** head) { Node* phead; Node* CurrentHead; int InputValue; int i = 1; while(scanf("%d", &a)) { if (0 != a) { CurrentHead = (Node*)malloc(sizeof(Node)); CurrentHead->value = a; // 第一个结点的处理操作 if (1 == i) { *head = CurrentHead; } else { phead->next = CurrentHead; } phead = CurrentHead; } else { phead->next = NULL; break; } i++; } }
参考文档
/article/1307880.html相关文章推荐
- iOS开发-- TFHpple抓取GB-2312编码的html页面,页面返回编码错误
- How far away ? (hdu 2586 LCA)
- android:assets下的文件复制到SD卡
- UIView 子界面的处理
- 调整数组元素的顺序使得奇数在前偶数在后并且各自有序
- poj 1815 Friendship 【最小割点集】【枚举删点 + 求解最小字典序】
- Python学习笔记1--动态类型
- 启动2015世界人工智能系统智商排名,检测人工智能是否超越人类
- laravel 多对多 belonsToMany
- 算法系列--Climbing Stairs
- f2fs解析(三)NAT中如何区分inode和其他dnode
- 【redis】 windows 32x 64x
- 开博MARK
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- LeetCode-Lowest Common Ancestor of a Binary Search Tree
- 15_09_14 English 学习
- 关于ViewPager和Fragment的二三事
- nyoj--32--组合数
- sessionId 失效 ,后台“品”字后台跳转
- 同时持有多单和空单