首页 > 代码库 > [leetcode]Remove Nth Node From End of List
[leetcode]Remove Nth Node From End of List
Remove Nth Node From End of List
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.
算法:删除单链表的节点一定要找到其前驱节点。
思路1:先求出list的长度,从而在遍历的时候可以计数,通过计数从而找到其前驱节点,空间时间复杂度都是O(n),但是两次遍历,计算list长度的时候,第二遍遍历的时候。
比较简单,不再实现了。
思路2,双指针,让第二个指针先走n步,然后齐步走,第二个指针走到底的时候,第一个指针刚好停在其前驱,一次遍历
代码如下:
1 public class Solution { 2 public ListNode removeNthFromEnd(ListNode head, int n) { 3 ListNode hhead = new ListNode(0); 4 hhead.next = head; 5 ListNode one = hhead; 6 ListNode two = hhead; 7 for(int i = 0; i < n; two = two.next,i++); 8 while(two.next != null){ 9 one = one.next;10 two = two.next;11 }12 one.next = one.next.next;13 return hhead.next;14 }15 }
链表题,双指针真的很常用,甚至是三指针,这道题是很经典的面试题,只不过本题把难度限制了,比如n的大小范围合法,默认list合法等
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。