数据结构与算法学习--链表
2012-11-12 15:52
513 查看
链表分为单链,双链和循环链表,链表C语言实现:
1.单链表反转。
以微软的一道面试题为例,编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来。
给出反转函数:
2.链表添加节点
3.无头链表删除给定节点
同样以一面试题为例
假设一个没有头指针的单链表,一个指针指向此单链表中间的一个节点(非第一个或最后一个节点),请将该节点删除。
//单链 typedef struct NodeType { char elem; NodeType * next; } Node; //双链 typedef struct DuobleNodeType { char elem; NodeType *next; NodeType *prev; }DoubleNode;
1.单链表反转。
以微软的一道面试题为例,编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来。
给出反转函数:
Node* LinkList_reverse(Node* head) { Node *preNode,*curNode,*nextNode; if(head==NULL) return NULL;//空链表 if(head->next == NULL) return head;//仅一个元素 curNode = head;preNode=NULL;//初始化 while(curNode) { nextNode = curNode->next;//先记录下一个结点 curNode->next = preNode;//改变链表方向(逆置) preNode = curNode;//将当前结点作为下一次循环的前一个结点 curNode = nextNode;//向后推移一个结点 } return preNode;//当遍历完链表后curNode应该为空,此时preNode链表头(head) }
2.链表添加节点
//在给定的节点前插入新节点 void LinkList_Add(Node* ptr,Node* newNode) { int temp = 0; newNode->next = ptr->next; ptr->next = newNode; temp = ptr->e; ptr->e = newNode->e; newNode->e = temp; }
3.无头链表删除给定节点
同样以一面试题为例
假设一个没有头指针的单链表,一个指针指向此单链表中间的一个节点(非第一个或最后一个节点),请将该节点删除。
//删除节点 void LinkList_Delete(Node* ptr) { Node* temp = ptr->next; if(temp != NULL) { ptr->e = temp->e; ptr->next = temp->next; delete temp;//这里delete好像有问题,以后再看下 } }
相关文章推荐
- 算法学习之数据结构之双向链表
- 数据结构与算法学习笔记之写链表代码的正确姿势(下)
- 【学习笔记】数据结构与算法基础学习:链表
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- 数据结构和算法学习(5)-链表
- [数据结构算法学习] 单向链表
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)
- php学习第一章:PHP基础语法(三)数据结构与算法:2、单向链表
- 算法学习-数据结构之链表操作,创建,插入,删除,查找。
- 算法学习之数据结构之链表是否相交,链表是否存在环
- 转:C#数据结构和算法学习系列十三----链表
- 数据结构与算法学习笔记之写链表代码的正确姿势(下)
- 数据结构与算法学习笔记
- #数据结构与算法学习笔记#剑指Offer1.5:二维数组中的查找(C++)
- 算法学习之数据结构之二叉查找树
- 数据结构经典算法学习之完全背包问题
- 数据结构与算法学习笔记--计算模型
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2