思路:用双指针去遍历链表,删除left的下一个节点,注意的是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* left = head;ListNode* right = head;while(n--&&head){right = right->next;}//表明n大于等于这个链表的长度,即删除第一个链表节点if(right == nullptr) return head->next;while(right->next){left = left->next;right = right->next;}left->next = left->next->next;return head;}
};