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.
Subscribe to see which companies asked this question
package leetcode;
/**
*
* @author Mouse
*
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int count = 0;
ListNode p = head;
while (p != null) {
p = p.next;
count++;
}
if (n == 1 && count == 1) {// 如果链表=1,只有一个元素
return null;
} else if (n > count) {// 要删除的竟然比链表还长
return null;
} else if (count >= 2 && n == 1) {// 如果链表>2,要删除的元素在末尾
p = head;
int i = 1;
ListNode q = null;
while (p != null) {
if (i == count) {
p = null;
q.next = p;
return head;
}
q = p;
p = p.next;
i++;
}
} else if (count == n) {// 如果链表>2,要删除的元素在头部
return head.next;
} else {// 如果要删除的元素在中间
int delNumber = count - n;
p = head;
int j = 1;
while (p != null) {
if (j == delNumber) {
p.next = p.next.next;
return head;
}
j++;
p = p.next;
}
}
return head;
}
public static void main(String[] args) {
}
}