面试题—链表操作
2016-01-27 20:38
579 查看
链表是最基本的数据结构,也是面试中较为常见的问题,链表的一些基本操作功能是必须能够实现,下面是一些关于链表基本的操作。
——链表的节点设置
——链表的基本操作
(1)删除一个无头单链表的非尾节点
(2)在无头单链表的一个非头结点前插入一个节点
(3)查找单链表的中间节点,要求只能遍历一次链表
(4)查找单链表的倒数第k个节点,要求只能遍历一次单链表
(5)从尾到头打印单链表(使用递归,压入堆栈)
(6)逆置单链表,不能创建节点
——链表的节点设置
typedef int Datatype; typedef struct SListNode { Datatype data; //数据域 struct SListNode *next; //next指针域 }SListNode;
——链表的基本操作
(1)删除一个无头单链表的非尾节点
(2)在无头单链表的一个非头结点前插入一个节点
(3)查找单链表的中间节点,要求只能遍历一次链表
(4)查找单链表的倒数第k个节点,要求只能遍历一次单链表
(5)从尾到头打印单链表(使用递归,压入堆栈)
(6)逆置单链表,不能创建节点
//利用头插法建立单链表 void Frontinsert(SListNode *&phead) { SListNode *tmp = (SListNode *)malloc(sizeof(SListNode)); } //删除一个无头单链表的非尾节点 void DelNonTailNode(SListNode *pos) { assert(pos); assert(pos->next); //非尾节点 SListNode *del = pos->next; pos->data = del->data; pos->next = del->next; free(del); } //在无头单链表的一个非头结点前插入一个节点 void insertFrontNode(SListNode *pos, Datatype x) { assert(pos); SListNode *tmp = _BuyNode(x); tmp->next = pos->next; pos->next = tmp; Datatype tmpdata = pos->data; pos->data = tmp->data; tmp->data = tmpdata; } //查找单链表的中间节点,要求只能遍历一次链表 SListNode * FindMidNode(SListNode * phead) { SListNode *fast = phead; SListNode *slow = phead; while (fast) { if (fast->next != NULL) { fast = fast->next->next; } else { break; } slow = slow->next; } return slow; } //查找单链表的倒数第k个节点,要求只能遍历一次单链表 SListNode * FindKNode(SListNode *phead, Datatype k) { SListNode *fast = phead; SListNode *slow = phead; while (fast && k--) { fast = fast->next; } if (fast == NULL) { return NULL; } while (fast) { fast = fast->next; slow = slow->next; } return slow; } //从尾到头打印单链表(使用递归,压入堆栈) void printTailToHead(SListNode *phead) { if (phead == NULL) { return; } else { printTailToHead(phead->next); printf("%d ", phead->next); } } //逆置单链表,不能创建节点 SListNode *Reverse(SListNode *phead) { SListNode *cur = phead; SListNode *newhead = NULL; while (cur) { SListNode *tmp = cur; cur = cur->next; tmp->next = newhead; } return phead; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 一道sql面试题附答案
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C# 超高面试题收集整理
- C#定义并实现单链表实例解析
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C语言实现单链表逆序与逆序输出实例
- 人人网javascript面试题 可以提前实现下
- C#数据结构之堆栈(Stack)实例详解
- C语言单链表常见操作汇总
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- 深入理解链表的各类操作详解
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- Linux运维工程师笔试题第十三套