线性链表的是否带头结点问题
来源:互联网 发布:中国禁毒网络知识竞赛 编辑:程序博客网 时间:2024/05/23 15:46
简单线性链表的是否带头结点问题,花了点时间去整理了下。下面通过代码来解释下:
//链表带头结点与不带头结点的插入建立问题:
两者区别:
1. 不带头结点的单链表对于第一个节点的操作与其他节点不一样,需要特殊处理,
这增加了程序的复杂性和出现bug的机会,因此,通常
在单链表的开始结点之前附设一个头结点。
2. 带头结点的单链表,初始时一定返回的是指向头结点的地址,所以一定要用二维指针,
否则将导致内存访问失败或异常。
3.带头结点与不带头结点初始化、插入、删除、输出操作都不样,在遍历输出链表数据时,
带头结点的判断条件是while(head->next!=NULL),
而不带头结点是while(head!=NULL),虽然头指针可以在初始时设定,但是如1所述,
对于特殊情况如只有一个节点会出现问题。
/*不带头节点*/ #include<stdio.h>#include<stdlib.h> typedef struct node{ struct node *next; int age;}Node; Node *CreatList(){ Node *head = NULL; //头节点置空 Node *p,*t; int a ; while(scanf("%d",&a)){ if(a!=0){ t = (Node *)malloc(sizeof(Node)); t->age=a; if(head==NULL){ head = t; } else{ p->next = t; } p = t; } else{ p->next=NULL; //一定要有此部分结束,否则传值无底线 break; //终止循环 } } return head;} void print(Node *head){ Node *p = head; while(p!=NULL){ printf("%d ",p->age); p = p->next; }} int main(){ Node *p; p = CreatList(); print(p);}/*带头节点*//*#include<stdio.h>#include<stdlib.h> typedef struct node{ struct node *next; int age;}Node;Node *CreatList(Node *head){ head = (Node *)malloc(sizeof(struct node)); head->next = NULL;Node *p = head;int a; while(scanf("%d",&a)){ if(a!=0){ Node *current = (Node *)malloc(sizeof(struct node)); current->age = a;p->next = current;p = current; //p作为当前节点,为后面输出做垫 } else{ p->next = NULL; break; } } return head; }void print(Node *head){Node* p = head->next; while(p){ printf("%d ",p->age);p = p->next; }}int main(){Node *head,*p;p = CreatList(head);print(p); return 0;}*/
阅读全文
1 0
- 线性链表的是否带头结点问题
- 带头结点的线性链表类型
- 带头结点的线性链表类型
- 带头结点的线性链表类型
- 带头结点的线性链表的实现
- 带头结点的线性链表的编写与实现
- 带头结点的线性链表的基本操作
- 线性表和带头结点的双向循环链表
- 线性表 - 带头结点的循环单链表
- 线性表(带头结点的单链表)
- 带头结点双链循环线性表
- 判断带头结点的双循环链表是否对称
- 单链表反转问题(带头结点 和 不带头结点的 创建链表过程等)
- 带头结点的链表
- 带头结点的链表
- 带头结点的链表
- 带头结点的链表的地址问题
- 带头结点的线性表的链式实现
- 算法记录:击鼓传花问题c语言实现
- KD-Tree学习笔记
- storyboard 构建多tab页应用程序
- Eclipse+Java调用中科院分词系统ICTCLAS2016
- fread 快速读入
- 线性链表的是否带头结点问题
- 知道这20个正则表达式,能让你少写1000行代码
- 数据库设计原则(转载)
- 并归排序(JAVA)
- 【面经笔记】主定理
- php中str_replace和str_ireplace的用法和区别
- POJ3420-Quad Tiling
- MyBatis Generator关于注释的生成
- 【shell编程学习】赋值和基本运算