class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head || n<=0)
return head;
ListNode* fast = head; // fast 落在 NULL 上
ListNode* slow = head; // slow 落在被删除的前一个上面
// 倒 1 的话 fast 和 slow 差 1
// 倒 2 的话 fast 和 slow 差 2
while(fast && n) {
fast = fast->next;
n--;
}
if(n)
return head;
if(!fast)
return head->next;
fast = fast->next;
while(fast) {
slow = slow->next;
fast = fast->next;
}
slow->next = slow->next->next;
return head;
}
};
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head || n<=0)
return head;
ListNode* fast = head; // fast 落在 NULL 上
ListNode* slow = NULL; // slow 落在被删除的前一个上面
while(fast && n) {
fast = fast->next;
n--;
}
if(n)
return head;
if(!fast)
return head->next;
while(fast) {
fast = fast->next;
if (!slow)
slow = head;
else
slow = slow->next;
}
slow->next = slow->next->next;
return head;
}
};
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head || n<=0)
return head;
ListNode* fast = head; // fast 落在最后一个结点上
ListNode* slow = head; // slow 落在被删除的前一个上面
while(fast->next && n) {
fast = fast->next;
n--;
}
if(n > 1)
return head;
if(n == 1)
return head->next;
while(fast->next) {
slow = slow->next;
fast = fast->next;
}
slow->next = slow->next->next;
return head;
}
};
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head || n<=0)
return head;
ListNode* fast = head; // fast 落在最后一个结点上
ListNode* slow = NULL; // slow 落在被删除的前一个上面
n--;
while(fast->next && n) {
fast = fast->next;
n--;
}
if(n > 0)
return head;
while(fast->next) {
if (slow)
slow = slow->next;
else
slow = head;
fast = fast->next;
}
if (!slow)
return head->next;
slow->next = slow->next->next;
return head;
}
};
// 去除
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head || n<=0)
return head;
ListNode* slow = head;
ListNode* fast = head;
while(fast->next && n) {
fast = fast->next;
n--;
}
if (n > 0) // 其实只有 n == 1
return head->next;
while(fast->next) {
slow = slow->next;
fast = fast->next;
}
slow->next = slow->next->next;
return head;
}
};