鏈表題還是太簡單了。
怕越界所以先定義了一個頭結點的頭結點,然后定義快慢指針,快指針先走n步,隨后一起走,直到快指針走到頭,刪除慢指針后一個節點即可。
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* h=new ListNode(0,head);ListNode* slow=h;ListNode* fast=h;while(n--) fast=fast->next;while(fast->next){fast=fast->next;slow=slow->next;}slow->next=slow->next->next;return h->next;}
};