P13在O(1)时间内删除链表结点
package offer;
//在 O(1)时间删除链表结点 public class Problem13 {
public static void main(String[] args) {
ListNode node1 = new ListNode();
ListNode node2 = new ListNode();
ListNode node3 = new ListNode();
ListNode node4 = new ListNode();
node1.nextNode = node2;
node2.nextNode = node3;
node3.nextNode = node4;
node1.value = 1;
node2.value = 2;
node3.value = 3;
node4.value = 4;
System.out.println(node1.value);
System.out.println(node2.value);
System.out.println(node3.value);
System.out.println(node4.value);
//deleteNode(node1, node3);
//deleteNode(node1, node1);
//deleteNode(node1, node2);
//deleteNode(node1, node4);
deleteNode(node1, null);
System.out.println(node1.value);
System.out.println(node1.nextNode.value);
System.out.println(node1.nextNode.nextNode.value);
//System.out.println(node4.value);
}
public static void deleteNode(ListNode head,ListNode deleteNode){
if(head == null || deleteNode == null)return;
if(deleteNode == head && head.nextNode == null)//delete head
{
head = null;
}else
{
if(deleteNode.nextNode == null)
{//delete tail,traverse loop
ListNode temp = head;
while(temp.nextNode.nextNode != null)
{
temp = temp.nextNode;
}
temp.nextNode = null;
}
else
{
deleteNode.value = deleteNode.nextNode.value;
deleteNode.nextNode = deleteNode.nextNode.nextNode;
}
} }
}
不用全部遍历链表,对比,删除;
把deleteNode的下一个结点复制到deleteNode的位置,覆盖deleteNode(实际上是删除deleteNode的下一个结点)
注意考虑用例:
结点只有一个的链表;
删除有多个结点的链表尾结点(遍历);
删除空结点,链表为空;
删除有多个结点的链表的中间一个结点。
P13在O(1)时间内删除链表结点的更多相关文章
- 【编程题目】在 O(1)时间内删除链表结点
60.在 O(1)时间内删除链表结点(链表.算法).题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点.链表结点的定义如下:struct ListNode{int m_nKey;List ...
- 数据结构——算法之(027)( 在O(1)时间内删除链表结点)
[申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出. 联系邮箱:Mr_chenping@163.com] 题目:在O(1)时间内删除链表结点.且不知道链表头 题目分析: 1.把要删除节点的下 ...
- (剑指Offer)面试题13:在O(1)时间内删除链表结点
题目: 在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点.链表结点与函数的定义如下: struct ListNode{ int val; ListNode* next; } ...
- 在O(1)时间内删除链表结点 【微软面试100题 第六十题】
题目要求: 给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 参考资料:剑指offer第13题. 题目分析: 有几种情况: 1.删除的结点是头结点,且链表不止一个结点: 2.删除的结点是头结 ...
- 第六十题(在O(1)时间内删除链表结点)
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 思路:将待删除节点下一个节点的数据赋给当前节点.删除下一个节点就可以.
- C++实现O(1)时间内删除链表结点
/* * 删除链表节点.cpp * * Created on: 2018年4月13日 * Author: soyo */ #include<iostream> using namespac ...
- JZ-069-在 O(1) 时间内删除链表节点
在 O(1) 时间内删除链表节点 题目描述 在 O(1) 时间内删除链表节点. 方案:如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复 ...
- 剑指Offer面试题:12.在O(1)时间删除链表结点
一.题目:在O(1)时间删除链表结点 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 原文采用的是C/C++,这里采用C#,节点定义如下: public class ...
- 【面试题013】在O(1)时间删除链表结点
[面试题013]在O(1)时间删除链表结点 我们要删除结点i,我们可以把结点i的下一个结点j的内容复制到结点i,然后呢把结点i的指针指向结点j的下一个结点.然后在删除结点j. 1.如果结点i位于链表 ...
随机推荐
- mysql安装配置、主从复制配置详解【转】
仅限 centos7以下 版本 #yum install mysql #yum install mysql-server #yum install mysql-devel 启动服务 [root@loc ...
- BZOJ 4491: 我也不知道题目名字是什么
4491: 我也不知道题目名字是什么 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 278 Solved: 154[Submit][Status][ ...
- [LeetCode] Sudoku Solver 解数独,递归,回溯
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- 关联分析(Apriori算法)
两个概念: 频繁项集:常出现的物品集合 关联分析:找到诸如:尿布-->啤酒的关联,反过来则是另一条 两个控制参数: 项集的支持度(support):一个项集出现的次数在所有样本中出现的比例 可信 ...
- hibernate中SQL包含冒号
当前负责的项目使用的是hibernate,而“:”是hibernate的一个占位符,作为预编译使用的, select tmp.pid from (select pid, loginTime, @i : ...
- 从int 3探索Windows应用程序调试原理
http://www.cnblogs.com/xuanyuan/p/3998408.html
- ZFS -世界上最高级的文件系统之一
https://www.oschina.net/news/44302/openzfs_launch_announcement https://en.wikipedia.org/wiki/ZFS ZFS ...
- PHP设置头部编码为UTF-8语句
header("Content-type: text/html; charset=utf-8");
- 解决Ubuntu下gedit中文乱码的情况
windows下简体中文多用GBK编码 (或GB2312, GB18030), 而linux下多用UTF-8编码. 因此,一般来说在微软平台编辑的中文txt不能在ubuntu下直接打开查看,除非在保存 ...
- 报错:OpenCV Error: Assertion failed (src.size() == dst.size() && src.type() == dst.ty pe()) in unknown function, file ..……
在用cvDilate函数的时候,老是导致程序中断,报错如下: OpenCV Error: Assertion failed (src.size() == dst.size() && s ...