题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ ListNode* removeNthFromEnd(ListNode* head, int n) { // write code here int count=0; ListNode *p=head; // 先计数链表有几个元素 while(p!=nullptr){ count++; p=p->next; } // cout<<count; p=head; int i=1; //i是当前是第几个元素 // 当有n个元素,删除倒数第n个时,就是删除第一个元素,单独进行分析判断 if(count==n){ ListNode *temp=head->next; return temp; } // 分析判断除了删除第一个元素的情况下 while(i<=count-n){ // cout<<1; // 当遍历到应该删除的元素的前一个元素时,当前元素指向下一个元素的下一个,即跳过了应该删除的元素,(如果防止内存泄漏的话需要用一个指针指向需要删除的元素,释放掉内存空间) if(i==count-n){ ListNode *temp=p->next; p->next=temp->next; } // 正常遍历链表元素 p=p->next; i++; } return head; } };