题目描述
给定一个单向链表,要求删除从结尾数第n个结点,并返回修改后的表头。
样例
给定数组单向链表 1->2->3->4->5 ,以及 n = 2 ,修改后的链表为 1->2->3->5。
Note
- n总是合法的。
- 尝试使用一次遍历完成本题。
C++
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n){
int len = 0;
for (ListNode *cur = head; cur != NULL; cur = cur->next) // cur 从head开始;判断当前指针是否为空;cur指向下一个
len++; //得到链表长度
if (len==n)
return head -> next; // 如果n是链表的长度,则。。head->next??'
int cnt = 0;
for ( ListNode *cur = head; cur != NULL; cur= cur ->next){
cnt++;
if (cnt = len -n){
cur ->next = cur->next->next;
break;
}
}
return head;
}
};