数据结构面试题总结10——链表:链表综合
来源:互联网 发布:js高级程序设计最新版 编辑:程序博客网 时间:2024/05/18 06:20
问题1:链表反转
问题描述:将原链表反转。
Node* reverseList(Node *head){ if (head == NULL) { return NULL; } Node *oldHead = head; Node *newHead = NULL; Node *temp = NULL; while(oldHead) { newHead = oldHead; oldHead = oldHead->next; newHead->next = temp; temp = newHead; } return newHead;}
问题2:找出单链表倒数第k个元素
分析:使用两个指针,这是链表问题典型的方法之一前后指针。
Node* findReK(Node *head, int k){ if (head == NULL) { return NULL; } Node *first = head; Node *second = head; int i = 0; while(first) { first = first->next; ++i; if (i > k-1) { second = second->next; } } return second;}
问题3:找出单链表中间元素
分析:同样使用两个指针,一个快指针一个慢指针,这也是链表问题典型的解决方法之一。
Node* findMid(Node* head){ Node *p1, *p2; if (head == NULL || head->next == NULL) { return head; } p1 = p2 = head; while (1) { if (p2->next != NULL && p2->next->next != NULL) { p2 = p2->next->next; p1 = p1->next; } else { break; } } return p1;}
分析:删除最重要的一点就是要和后面的节点连上,可是我们无法获取被删除前面一个节点。但是被删除前面一个节点的next指向的是被删除节点的内存地址,所以我们把被删除之后的节点的内容复制到被删除节点的内存中就好了,然后删除被删除后面那个节点的内存。
bool deleteNode(Node *node){ if (node == NULL) { return false; } node->data = node->next->data; Node *temp = node->next; node->next = node->next->next; delete temp; return true;}
0 0
- 数据结构面试题总结10——链表:链表综合
- 数据结构面试题总结9——链表:基础操作
- 数据结构面试题总结
- 算法与数据结构面试题(10)-颠倒链表
- 数据结构之链表常见面试题
- 数据结构经典面试题——概念
- J2EE 面试题综合
- J2EE 面试题综合
- J2EE 面试题综合
- J2EE 面试题综合
- J2EE 面试题综合
- J2EE 面试题综合
- J2EE 面试题综合
- J2EE 面试题综合
- J2EE 面试题综合
- 综合面试题
- J2EE 面试题综合
- 综合面试题
- JavaScript获取当前根目录
- GDB调试器使用总结
- R语言学习
- 一个优秀的程序必备的几种设计模式
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(四)
- 数据结构面试题总结10——链表:链表综合
- Cron表达式详解
- Linux编程学习路线
- 结尾
- iText —— JAVA将html转pdf
- 我了解的百度排名算法因素
- Spring缓存机制的理解
- 黑马程序员——Java设计模式之工厂系列
- Jquery 获取input type=‘checkbox’是否被选中问题