给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
提交代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *p = head;
int size = 0;
while(p){
size++;
p = p->next;
}
p = head;
while (p){
if (size == n){
return head->next;
}
if(size == n+1){
p->next = p->next->next;
break;
}
p = p->next;
size--;
}
return head;
}
};
记录一下,居然击败了100%……虽然我没觉得这个算法有多好hhh