標籤:class code java ext com strong
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:雙指標思想,兩個指標相隔n-1,每次兩個指標向後一步,當後面一個指標沒有後繼了,前面一個指標就是要刪除的節點。注意:刪除節點時需要刪除指標的前驅pre;增加dummy head處理刪除前端節點的特殊情況。
public class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {if (head == null)return null;ListNode dummyHead = new ListNode(-1);dummyHead.next = head;ListNode s = head;ListNode t = head;n = n - 1;for (int i = 0; i < n; i++) {t = t.next;}ListNode preS = dummyHead;while (t.next != null) {preS = preS.next;s = s.next;t = t.next;}// remove spreS.next = s.next;s.next = null;return dummyHead.next;}public static void main(String[] args) {ListNode head = new ListNode(1);head.next = new ListNode(2);head.next.next = new ListNode(3);head.next.next.next = new ListNode(4);head.next.next.next.next = new ListNode(5);ListNode newHead = new Solution().removeNthFromEnd(head, 1);}}