有个链表算法题不懂 删除结点

img


这个是要求,我的思路是通过双指针,最后使得两个走到一起,返回公共节点即可,但是不知道为什么出现了Segmentation Fault 的错误,想请教一下


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplication(ListNode* head) {
        ListNode *dummy = new ListNode(-1);
        dummy->next = head;
        ListNode *p = head,*q = head->next;
        while (p)
        {
            while (q->next->val == q->val) q = q->next;
            if (p->next!=q)
            {
            p = p->next = q->next;
            q = p->next;
            }
            else p = p->next,q = q->next;
            
            
        }
        return dummy->next;
    }
};

我靠,删除都不用释放结点吗?

可以这样修改:


class Solution {
public:
    ListNode* deleteDuplication(ListNode* head) {
        ListNode *dummy = new ListNode(-1);
        dummy->next = head;
        ListNode *p = head,*q = head->next;
        while (q)
        {
          if (p->val == q->val)
          {
              q = q->next;
              p->next = q;
          }
        }
        return dummy->next;
    }
};