面试题15:在O(1)时间删除链表结点
2015-12-15 20:59
148 查看
题目:
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点结构如下:
思路:
这题不难,关键是能不能想到那个点上。
这题关键点不是删除给定指针对应的那个结点(如果这样,必须知道其前一个结点,显然O(1)时间无法完成)。
如果将后一个结点的值赋给前一个结点,然后删除后一个结点,就可以了。
需要说明的是,如果被删除的是最后一个,时间复杂度是O(n),不过平均复杂度仍然是O(1)。
如果删除的是头结点,因为删除的始终是下一个,所以不需要重新更新头结点。
还要考虑一种情况,只有一个结点,被删除和头结点都指向该结点。
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点结构如下:
struct ListNode{ int value; ListNode *next; };
思路:
这题不难,关键是能不能想到那个点上。
这题关键点不是删除给定指针对应的那个结点(如果这样,必须知道其前一个结点,显然O(1)时间无法完成)。
如果将后一个结点的值赋给前一个结点,然后删除后一个结点,就可以了。
#include <iostream> #include <vector> #include <string> #include <stack> #include <algorithm> using namespace std; struct ListNode{ int value; ListNode *next; ListNode(int a){ value = a; next = NULL; } }; void deleteNode(ListNode *head, ListNode *toBeDeleted) { if (!head || !toBeDeleted) return; if (toBeDeleted->next == NULL)//删除尾结点 { ListNode *p = head; if (head == toBeDeleted) { delete head; head = NULL; } while (p->next != toBeDeleted) p = p->next; p->next = NULL; delete toBeDeleted; return; } ListNode *nextOfDelete = toBeDeleted->next; toBeDeleted->value = nextOfDelete->value; toBeDeleted->next = nextOfDelete->next; delete nextOfDelete; } int main() { ListNode *a1 = new ListNode(1); ListNode *a2 = new ListNode(2); ListNode *a3 = new ListNode(3); ListNode *a4 = new ListNode(4); ListNode *a5 = new ListNode(5); a1->next = a2; a2->next = a3; a3->next = a4; a4->next = a5; deleteNode(a1, a5); for (ListNode*p = a1; p; p = p->next) cout << p->value << " "; cout << endl; return 0; }
需要说明的是,如果被删除的是最后一个,时间复杂度是O(n),不过平均复杂度仍然是O(1)。
如果删除的是头结点,因为删除的始终是下一个,所以不需要重新更新头结点。
还要考虑一种情况,只有一个结点,被删除和头结点都指向该结点。
相关文章推荐
- 面试题14:打印1到最大的n位数
- 华为校园招聘技术类笔试面试经验(摘)
- 黑马程序员——Java---接口
- Java面试题—try语句中执行return语句
- 面试时,问哪些问题能试出一个Android应用开发者真正的水平?
- 黑马程序员——Java---抽象,模板方法
- 职场红人之不可错过的经典句型
- 面试人员的几个方面的问题
- 35 岁程序员的独家面试经历
- 职场技巧:内向者如何修炼成社交达人
- 【跟着大磨马学IT编程(安卓java程序员)】第十六天 课程内容概述
- 面试题 - 百度小哥
- 极客学院职业路径图课程视频下载-爬虫
- iOS开发面试题整理 (一)
- 程序员也要学会沟通
- 程序员也要学会沟通
- 面试题13:数值的整数次方(offer)
- 衡量android开发者水平的面试问题-android学习之旅(91)
- 衡量android开发者水平的面试问题-android学习之旅(91)
- 衡量android开发者水平的面试问题-android学习之旅(91)