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的下一个结点)

注意考虑用例:

结点只有一个的链表;

删除有多个结点的链表尾结点(遍历);

删除空结点,链表为空;

删除有多个结点的链表的中间一个结点。

最新文章

  1. java第四次作业
  2. Asp.net(C#) windows 服务{用于实现计划任务,事件监控等}
  3. poj 2299 Ultra-QuickSort(求逆序对)
  4. 深入理解Java内存模型(二)——重排序
  5. Jmeter初步使用三--使用jmeter自身录制脚本
  6. DJANGO,获取当前用户名,用户组名,用户组权限
  7. dom0的cpu hotplug【续】
  8. VC2013 添加库文件
  9. Nginx基础教程PPT
  10. Androida规划nt打包
  11. cord-in-a-box 2.0 安装指南
  12. ORACLE启动报错ORA-03113: end-of-file on communication channel
  13. dskinlite自适应dpi
  14. css笔记详解(1)
  15. HTTP 压力测试工具
  16. 简单数论总结1——gcd与lcm
  17. P2670扫雷
  18. 优雅的将Map转为String工具类
  19. Oracle IF-ELSE 条件判断结构
  20. 洛谷 P1436 棋盘分割 解题报告

热门文章

  1. Python(2)-- 运算符
  2. 【CF1016D】Vasya And The Matrix(构造)
  3. Mongoose 参考手册
  4. eclipse集成JBPM
  5. python脚本传递参数
  6. MongoDB的使用[转]
  7. Oracle创建自增长主键
  8. DOM和jquery对象之间的转换
  9. hdu 5698(杨辉三角的性质+逆元)
  10. java 仓库maven