Given a linked list, remove the n-th node from the end of list and return its head.
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.
Follow up:
Could you do this in one pass?
需要注意一些边际条件,Accepted代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int i = 1;
ListNode aNode = head;
while (aNode.next != null) {
i = i + 1;
aNode = aNode.next;
}
if (i == 1) {
return null;
} else if (i == n) {
return head.next;
}
i = i - n;
ListNode bNode = head;
while (bNode.next != null && i != 1) {
i = i - 1;
bNode = bNode.next;
}
bNode.next = bNode.next.next;
return head;
}
}
这个解法当前时间和空间复杂度居然超过了100%的解法,简直不能相信