week9-leetcode #19-Remove-Nth-Node-From-End-of-List
链接:https://leetcode.com/problems/remove-nth-node-from-end-of-list/
Question
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.
Solution
time complecity: O(n)
space complecity: O(n)
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
int number = 0;
ListNode* p = head;
while (p != NULL) {
number++;
p = p->next;
}
cout << "number: " << number << endl;
int count = number-n;
p = head;
if (count == 0) {
head = head->next;
delete p;
} else {
while (count >= 0 && p != NULL) {
cout << "count: " << count << endl;
if (count == 1) {
cout << "I am in " << endl;
ListNode* q = p->next;
p->next = p->next->next;
delete q;
break;
}
p = p->next;
count--;
}
}
return head;
}
};
思路:先对链表遍历一次可得到整个链表的大小,与倒数第几的数求的差值,这个差值就是正数第几个数,再遍历一次找到待删除的节点进行相应的操作。