删除链表中倒数第n个节点
2016-07-10 20:54
323 查看
题目
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。注意事项
链表中的节点个数大于等于n
样例
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
解题
定义两个指针,slow、fastfast先先前走n步后、slow和fast一起走,直到fast到最后一个结点
当fast为空,说明fast在最后一个结点后面了,说明需要删除的是第一个结点,直接删除
为了方便删除第一个结点,加入头结点
下面slow.next指向的是需要删除的结点,直接删除
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param head: The first node of linked list. * @param n: An integer. * @return: The head of linked list. */ ListNode removeNthFromEnd(ListNode head, int n) { // write your code here ListNode p1 = head; if(n<=0 || p1==null) return p1; // 加上头结点 ListNode dummy = new ListNode(-1); dummy.next = head; head = dummy; ListNode slow = head.next; ListNode fast = head.next; while(n>=1){ fast = fast.next; n--; } if(fast==null) // 说明删除的是第一个非头结点 return head.next.next; while(fast.next!=null){ fast = fast.next; slow = slow.next; } slow.next = slow.next.next; // slow.next指向删除结点 return head.next; } }
相关文章推荐
- 使用泛型统一传入的参数类型
- C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结
- 个人总结之基于MSP430F5510的X9331驱动
- SGU 311. Ice-cream Tycoon(平衡树)
- 二叉树应用-Huffman编码树(数据结构基础 第6周)
- Qt中使用CSDN git
- The Blacksmith学习的相关资源
- mysql的普通索引,唯一索引,主索引
- java 删除目录
- 【Python学习笔记】函数式编程:高阶函数filter
- JQuery的一些有用的小方法
- 网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室
- java 解压文件
- RecyclerView基本用法
- 程序中减少使用 if 语句的策略
- 405: HTTP method GET is not supported by this URL
- ADO面向对象使用
- KSFramework:集成U3D热重载框架 - README
- bzoj4197
- This cache store does not support tagging