每日一道算法题——Remove Nth Node From End of List
2017-02-17 16:46
369 查看
去掉倒数第n的节点
题目
Given a linked list, remove the nth node from the end of list and return its head.For example,
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list
becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
分析
题目说明了n总是合法的,并且建议我们用一次遍历完成。题目中给出的节点类如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
这是写节点可以构成一个单向链表,所以无法回头!
算法
采用两个引用,一快一慢,中间的间隔为给出的n,所以当快的那个到了末尾,那么慢的那个的下一个元素就指向了要去除的元素了。虽然看起来挺简单,但是实现起来并不容易,边界条件还是比较多的,但是我写完之后看了下面那个代码,我就发现,真是太机智了!
代码
public class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode start = new ListNode(0); ListNode slow = start, fast = start; slow.next = head; //Move fast in front so that the gap between slow and fast becomes n for(int i=1; i<=n+1; i++) { fast = fast.next; } //Move fast to the end, maintaining the gap while(fast != null) { slow = slow.next; fast = fast.next; } //Skip the desired node slow.next = slow.next.next; return start.next; } }
他在开始新建了一个节点,所以避免了很多不必要的特殊条件的判断。大家可以自己尝试一下,然后自己输入一些数据验证一下。
相关文章推荐
- leetcode:Remove Nth Node From End of List(删除链表倒数第n个节点)【面试算法题】
- 算法 20 Remove Nth Node From End of List
- (算法分析Week16)Remove Nth Node From End of List[Medium]
- leetcode:19 Remove Nth Node From End of List-每日编程第三十六题
- python写算法题:leetcode: 19. Remove Nth Node From End of List
- LeetCode算法问题8 —— Remove Nth Node From End of List
- 【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】
- 19. Remove Nth Node From End of List 一道简单的双指针
- 第六周算法分析与设计Ⅰ:Remove Nth Node From End of List
- 算法系列——Remove Nth Node From End of List
- Leetcode 19 Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List
- [Leetcode 19] 19 Remove Nth Node From End Of List
- [Leetcode] Remove Nth Node From End of List
- Remove Nth Node From End of List
- [面试真题] LeetCode:Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List
- leetcode: Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List