【剑指offer 面试题13】在 O(1) 时间删除链表结点
#include <iostream>
using namespace std; //构造链表结点
struct ListNode
{
int val;
ListNode *next; ListNode(int v = ):val(v), next(NULL){};
}; //打印结点
void printList(ListNode *head)
{
while(head != NULL)
{
cout<<head->val<<" ";
head = head->next;
}
cout<<endl;
} //删除结点
void deleteListNode(ListNode **head, ListNode *tobeDeleted)
{
//头结点或者待删除结点为空,则结束调用
if(*head == NULL || tobeDeleted == NULL)
return ; //待删除结点的pnext非空,则复制其值到待删除结点,删除pnext
if(tobeDeleted->next != NULL)
{
ListNode *pnext = tobeDeleted->next; tobeDeleted->val = pnext->val;
tobeDeleted->next = pnext->next; delete pnext;
pnext = NULL;
}
//若只剩头结点,则删除头结点
else if(tobeDeleted == *head)
{
delete tobeDeleted; tobeDeleted = NULL;
*head = NULL;
}
//若待删除结点为尾结点,则顺序查找后删除
else
{
ListNode *phead = *head; while(phead->next != tobeDeleted)
{
phead = phead->next;
} phead->next = NULL;
delete tobeDeleted;
tobeDeleted = NULL;
}
} int main()
{
ListNode *ls = new ListNode();
ListNode *head = ls; ListNode *l1 = new ListNode();
ls->next = l1;
ls = ls->next; ListNode *l2 = new ListNode();
ls->next = l2;
ls = ls->next; ListNode *l3 = new ListNode();
ls->next = l3;
ls = ls->next; ListNode *l4 = new ListNode();
ls->next = l4;
ls = ls->next; cout<<"初始链表 -> ";
printList(head);
cout<<endl; cout<<"删除中间结点2后 -> ";
deleteListNode(&head,l2);
printList(head);
cout<<endl; cout<<"删除尾结点4后 -> ";
deleteListNode(&head,l4);
printList(head);
cout<<endl; cout<<"删除中间结点1后 -> ";
deleteListNode(&head,l1);
printList(head);
cout<<endl; cout<<"删除尾结点3后 -> ";
deleteListNode(&head,l1);
printList(head);
cout<<endl; cout<<"删除头结点后 -> ";
deleteListNode(&head,head);
printList(head);
cout<<endl;
}
测试结果:
初始链表 -> 删除中间结点2后 -> 删除尾结点4后 -> 删除中间结点1后 -> 删除尾结点3后 -> 删除头结点后 ->
【剑指offer 面试题13】在 O(1) 时间删除链表结点的更多相关文章
- 剑指Offer:面试题13——在O(1)时间删除链表结点
问题描述: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点.链表结点与函数的定义如下: public class ListNode{ int value; ListNode ...
- 【剑指Offer面试题】 九度OJ1518:反转链表
与其非常快写出一段漏洞百出的代码,倒不如细致分析再写出鲁棒的代码. 提前想好測试用例(输入非空等等)进行測试改动代码. 题目链接地址: http://ac.jobdu.com/problem.php? ...
- C++版 - 剑指offer 面试题5:从尾到头打印链表 题解
面试题5:从尾到头打印链表 提交网址: http://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tq ...
- 剑指Offer面试题15(Java版):链表中倒数第K个结点
题目: 输入一个链表.输出该链表中倒数第k哥结点. 为了符合大多数人的习惯,本题从1開始计数.即链表的尾结点是倒数第1个结点. 比如一个链表有6个结点.从头结点開始它们的值依次是1.2.3,4,5, ...
- (剑指Offer)面试题13:在O(1)时间内删除链表结点
题目: 在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点.链表结点与函数的定义如下: struct ListNode{ int val; ListNode* next; } ...
- 《剑指offer》面试题13 在O(1)时间删除链表节点 Java版
这道题的关键是知道找到尾节点的前一个节点必须遍历,而且这样做了之后总的时间复杂度还是O(1),以及如何不破坏链表删除一个已知节点 public ListNode delete(ListNode hea ...
- 剑指Offer面试题:4.从尾到头打印链表
一.题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 到解决这个问题肯定要遍历链表.遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头.也就是说第一个遍历到的结 ...
- 剑指Offer:面试题17——合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val & ...
- 剑指offer-面试题13.在O(1)时间删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点. 链表节点与函数的定义如下. 通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点. 然后使得该节点的next ...
随机推荐
- 【Linux高频命令专题(11)】cp
概述 cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是 ...
- 百度和 Google 的搜索技术是一个量级吗?
著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Kenny Chao 链接:http://www.zhihu.com/question/22447908/answer/2 ...
- 2014-9-17二班----7 web project
package cn.rwkj.servlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServle ...
- Git教程之工作区和暂存区(5)
工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
- Retrofit分析-漂亮的解耦套路
没耐心自己分析源码的同学,还可以参考Stay录制的视频版 Retrofit分析-漂亮的解耦套路(视频版) 万万没想到Retrofit会这么火,在没看源码之前,我简单的认为是因为它跟OkHttp同出一源 ...
- 安卓开发44:解决 INSTALL_FAILED_UID_CHANGED 等问题
apk无法卸载,一般可以下面的方法试一下: 1. 删除/data/app/(filename) 文件夹下的apk包 2. 删除/system/app/(filename) 文件夹下的apk包 3. 将 ...
- MSSQL中把表中的数据导出成Insert
use master go if exists (select name from sysobjects where name = 'sp_generate_insert_script') begin ...
- UVa 116 (多段图的最短路) Unidirectional TSP
题意: 有一个m行n列的正整数环形矩阵(即矩阵第一行的上一行是最后一行,最后一行的下一行是第一行),从第一列的任意位置出发,每次只能向右,右上,右下三个方向行走,输出路径及路径上所有数之和的最大值,多 ...
- 图形数据库、NOSQL和Neo4j
简介 在众多不同的数据模型里,关系数据模型自80年代就处于统治地位,而且有不少实现,如Oracle.MySQL和MSSQL,它们也被称为关系数据库管理系统(RDBMS).然而,最近随着关系数据库使用案 ...
- I.MX6 Android netperf
/***************************************************************************** * I.MX6 Android netpe ...