知识点

链表删除操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头节点在进行删除操作
我个人认为 虚拟头节点虽然增加了空间,但理解上比较方便,同时在处理删除头节点问题时也可以统一操作。

题目

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

code

  1. class Solution {
  2. public:
  3. ListNode* removeElements(ListNode* head, int val) {
  4. //设置虚拟头节点,统一操作
  5. ListNode* dummynode =new ListNode(0);
  6. dummynode->next =head;//让虚拟头节点指向头节点
  7. ListNode* curnode =dummynode;
  8. while(curnode->next!=NULL){
  9. if(curnode->next->val ==val){
  10. ListNode* temnode =curnode->next;
  11. curnode->next =temnode->next;
  12. delete temnode;
  13. }else{
  14. curnode =curnode->next;
  15. }
  16. }
  17. head =dummynode->next;
  18. delete dummynode;
  19. return head;
  20. }
  21. };