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.
思路:两个指针 p, q,其中q先走n步,之后如果q为null,则删除第一个node,否则,p, q开始一起走,直到q.next为null,此时p.next即是要删除的node.
JAVA代码:
public ListNode removeNthFromEnd(ListNode head, int n) { ListNode p = head; ListNode q = head; int i = 0; while (i < n) { q = q.next; i ++; } if (q == null) { head = head.next; return head; } while (q.next != null) { q = q.next; p = p.next; } p.next = p.next.next; return head; }