题目主要考的是:
- 快慢指针的应用
- 哑节点 dummyhead
/** * 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* dummyhead=new ListNode(-1,head); ListNode* pre=dummyhead; ListNode* now=head; for(int i=0;i<n;i++)now=now->next; while(now!=nullptr){ pre=pre->next; now=now->next; } pre->next=pre->next->next; // 可以删除dummyhead ListNode * ans=dummyhead->next; delete dummyhead; return ans; // //1.单个节点 // if(now->next==NULL)return nullptr; // else{ // //2. 删除最后一个节点 // if(n==1){ // now=now->next; // while(now->next!=nullptr){ // now=now->next; // pre=pre->next; // } // pre->next=nullptr; // } // //3. 删除的并非最后一个节点 // else{ // for(int i=0;i<n;i++)now=now->next; // while(now!=nullptr){ // now=now->next; // pre=pre->next; // } // if(pre==head)head=pre->next; // else{ // int temp=pre->next->val; // pre->next=pre->next->next; // pre->val=temp; // } // } // } // return head; } };