题目:
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个的节点,返回去除节点后的头结点。
例如:
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.
注意:
给定的n都是有效的。
试着一次遍历就得出结果。
算法分析:
Use fast and slow pointers. The fast pointer is n steps ahead of the slow pointer. When the fast reaches the end, the slow pointer points at the previous element of the target
element.
利用快慢双指针。快指针在慢指针之前n步。当快指针到达链表的结尾时,慢指针正好指向了目标元素的头一个元素。
AC代码:
public class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head == null) return null; ListNode fast = head; ListNode slow = head; for(int i=0; i<n; i++) { fast = fast.next; } //if remove the first node if(fast == null) { head = head.next; return head; } while(fast.next != null) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; return head; } }
版权声明:本文为博主原创文章,转载注明出处
时间: 2024-09-30 23:27:42