中企中立做的网站好吗,印象云笔记 wordpress,湖南中耀建设集团有限公司网站,开发网站报价方案原题链接
解法#xff1a;双指针
思路#xff1a;第一个点可以能被删除#xff0c;所以需要一个虚拟头节点。被删除的点位于倒数第n的位置#xff0c;因为是单链表#xff0c;即找到倒数n 1最后#xff0c;想要删除这个节点必须要保留它的前一个节点使其p-next …原题链接
解法双指针
思路第一个点可以能被删除所以需要一个虚拟头节点。被删除的点位于倒数第n的位置因为是单链表即找到倒数n 1最后想要删除这个节点必须要保留它的前一个节点使其p-next p-next-next。返回虚拟头节点的next。可以先使一个指针移动n步然后两个指针
同时移动第一个指针到达最后的时候第二个指针恰好在倒数第n 1的位置
/*** 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) {auto p1 new ListNode(-1);p1-next head;auto p2 p1 , p3 p1;//先走n步while(n--)p2 p2-next;//双指针同时向后移动两个指针的距离是确定的while(p2-next){p2 p2-next;p3 p3-next;}p3-next p3-next-next;return p1-next;}
};