19. 删除链表的倒数第N个节点
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 10 //1、删除节点,就是找到该节点的前一个节点就可以 11 //2、然后slow->next = slow->next->next; 12 13 //双指针算法 14 //删除->都会建立虚拟头节点 15 class Solution 16 { 17 public: 18 ListNode* removeNthFromEnd(ListNode* head, int n) 19 { 20 ListNode* dummy = new ListNode(-1); 21 dummy->next = head; 22 23 ListNode* fast = dummy; 24 ListNode* slow = dummy; 25 for(int i = 0;i <= n;i ++) fast = fast->next; 26 while(fast) 27 { 28 fast = fast->next; 29 slow = slow->next; 30 } 31 slow->next = slow->next->next;//不需要判空,因为有虚拟头节点的存在 32 return dummy->next; 33 } 34 };
Mamba never out

浙公网安备 33010602011771号