题目:
Given a linked list, remove the nth node from the end of list and return its head.
For 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.
Try to do this in one pass.
思路:双指针。
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
ListNode dummy(0);
dummy.next = head;
ListNode* front = &dummy;
for (int i = 0; i < n; ++i) {
if (front == nullptr) return head; //no node to be removed
front = front->next;
}
ListNode* back = &dummy;
while (front->next != nullptr) {
front = front->next;
back = back->next;
}
back->next = back->next->next; //remove the node
return dummy.next;
}
};
总结:复杂度为O(n),双指针和加dummy都是链表很常见的操作。