#leetcode203
贴一张图
炸掉了
上正确的代码
1 class Solution { 2 public: 3 ListNode* removeElements(ListNode* head, int val) { 4 ListNode* dummyhead = new ListNode(0);//new一块空间并设置初值为0,然后返回该空间的地址 5 dummyhead -> next = head;//让虚拟链表头连接真正的链表头 6 ListNode* cur = dummyhead;//声明一个遍历链表的指针,从遍历的起点是虚链表头 7 while(cur -> next != NULL) 8 { 9 if (cur -> next -> val == val)//如果找到要删除的链表结点 10 { 11 ListNode* temp = cur -> next;//声明临时指针保存要删除结点的地址 12 cur -> next = cur -> next -> next;//让待删除结点的前继结点指向它的后继结点 13 delete temp;//删除结点 14 } 15 else { 16 cur = cur -> next;//更新当前指针 17 } 18 } 19 head = dummyhead -> next;//更新当前链表头 20 delete dummyhead;//删除虚拟链表头 21 return head; 22 } 23 };
早上写这题是看到吴师兄的推荐,但卡尔没推荐说这题是双指针系列,卡尔把这题归为链表操作,这里涉及到一个盲区就是--如果要删除的元素在链表头,就要先声明一个虚的链表头,然后让它的next指向head,我早上写的代码一直都朝双指针这方向写,测试用例可以过大部分,就是要删除元素在表头就报错,刷题路线要坚定不移地跟一个人的就行,跟卡尔,卡尔YYDS,不然就很浪费时间。