链表中头和尾节点/指针的常规用法:插入、删除、遍历
2015-01-18 10:09
316 查看
链表中头和尾节点/指针的常规用法
循环、永远非空
头插入:head->next= head;
在x节点后插入t节点:t->next= x->next; x->next = t;
删除x后的节点:x->next= x->next->next;
遍历循环:(1) t =head;
do{ …; t = t->next; }while(t!= head);
(2)for(t= head; t != head; t = t->next) {…}
测试只有一个元素:if(head->next == head)
头指针、尾节点为空
初始化:head =NULL;
在x节点后插入t节点:if(x ==NULL) { head = t; t->next = NULL}
//空表
else{ t->next= x->next; x->next = t;}
删除x后的节点:t = x->next; x->next = t->next; free(t);
遍历循环:(1) t =head; while(t!=NULL) {…; t = t->next}
(2)for(t= head; t !=NULL; t = t->next) {…}
测试表是否为空:if(head ==NULL)
有哑元头节点,尾节点为空
初始化:head = (Node*)malloc(sizeof(*head)); head->next =NULL;
在x节点后插入t节点:if(x ==NULL) {head->next= t; t->next =
NULL}//空表
else{t->next = x->next; x->next= t}
删除x后的节点:t = x->next; x->next = t->next; free(t);
遍历循环:(1) t =head->next; while(t !=NULL) {…; t = t->next}
(2)for(t= head->next; t !=NULL; t = t->next) {…}
测试链表为空:if(head->next ==NULL);
有哑元头节点,尾节点
初始化:head = (Node*)malloc(sizeof(*head));
z= (Node*)malloc(sizeof(*z));
head->next= z; z->next = z;
插入、删除、遍历同上;
测试链表为空:if(head->next == z);
《算法:C语言实现》P57
循环、永远非空
头插入:head->next= head;
在x节点后插入t节点:t->next= x->next; x->next = t;
删除x后的节点:x->next= x->next->next;
遍历循环:(1) t =head;
do{ …; t = t->next; }while(t!= head);
(2)for(t= head; t != head; t = t->next) {…}
测试只有一个元素:if(head->next == head)
头指针、尾节点为空
初始化:head =NULL;
在x节点后插入t节点:if(x ==NULL) { head = t; t->next = NULL}
//空表
else{ t->next= x->next; x->next = t;}
删除x后的节点:t = x->next; x->next = t->next; free(t);
遍历循环:(1) t =head; while(t!=NULL) {…; t = t->next}
(2)for(t= head; t !=NULL; t = t->next) {…}
测试表是否为空:if(head ==NULL)
有哑元头节点,尾节点为空
初始化:head = (Node*)malloc(sizeof(*head)); head->next =NULL;
在x节点后插入t节点:if(x ==NULL) {head->next= t; t->next =
NULL}//空表
else{t->next = x->next; x->next= t}
删除x后的节点:t = x->next; x->next = t->next; free(t);
遍历循环:(1) t =head->next; while(t !=NULL) {…; t = t->next}
(2)for(t= head->next; t !=NULL; t = t->next) {…}
测试链表为空:if(head->next ==NULL);
有哑元头节点,尾节点
初始化:head = (Node*)malloc(sizeof(*head));
z= (Node*)malloc(sizeof(*z));
head->next= z; z->next = z;
插入、删除、遍历同上;
测试链表为空:if(head->next == z);
《算法:C语言实现》P57
相关文章推荐
- 只给出链表某节点的的指针,如何删除它(不允许遍历)
- 写一些链表中头和尾节点/指针的常规用法
- malloc的链表,创建链表,遍历链表,插入节点,删除节点
- 链表的创建、遍历、节点的插入、节点的删除
- 【算法之链表(三)】单链表中,在仅允许使用一个指针的情况下,在指定的节点前面插入以及删除一个节点
- 链表之节点插入、查找删除、遍历打印、遍历释放
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
- 单循环链表的初始化、插入、删除、遍历、查找
- 排序二叉树常规操作(搜索,插入,删除,最大节点,最小节点)
- 链表:检测是否有环,是否相交,删除节点,插入节点,打印节点,建立节点,节点排序,节点逆序,
- 创建一个链表、删除一个节点、插入一个节点--实验
- 数据结构---单链表(建立,节点删除,节点插入)
- 【数据结构】C语言实现链表节点的插入和删除
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
- 用结构体实现链表的创建、遍历、结点插入、结点删除
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- 指针链表形成,新的结点的插入和删除
- 只知道某个单向链表的中的某个指针,且该指针不是尾指针,如何删除该节点。
- 链表的基本操作 从头部插入 尾部插入 中间插入 删除节点