非递归的代码:

  1. 首先添加一个头节点,以方便碰到第一个,第二个节点就相同的情况
  2. 设置 pre ,last 指针, pre指针指向当前确定不重复的那个节点,而last指针相当于工作指针,一直往后面搜索。
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        if (pHead==nullptr || pHead->next==nullptr){return pHead;}
        ListNode *Head = new ListNode(0); //初始化
        Head->next = pHead;
        ListNode *pre  = Head;
        ListNode *last = Head->next;
        while (last!=nullptr){
            if(last->next!=nullptr && last->val == last->next->val){
                // 找到最后的一个相同节点
                while (last->next!=nullptr && last->val == last->next->val){
                    last = last->next;
                }
                pre->next = last->next;
                last = last->next;
            }else{
                pre = pre->next;
                last = last->next;
            }
        }
        return Head->next;
    }
};
以下是自己所写代码,问题一直解决不了。
问题:
段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起点击对比用例标准输出与你的输出
case通过率为0.00%
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        if(pHead==nullptr) return pHead;
        ListNode* StayNode=nullptr;
        ListNode *pNode=pHead,*theBeforeNode=nullptr,*theLastStayNode=nullptr;
        while(pNode!=nullptr){
            if(theBeforeNode==nullptr && pNode->val!=pNode->next->val) StayNode=pNode; //第一个节点为保留节点
            if(theBeforeNode!=nullptr && theBeforeNode->val!=pNode->val && pNode->val!=pNode->next->val){
                if(StayNode!=nullptr){
                    theLastStayNode=StayNode;
                    StayNode=pNode;
                    theLastStayNode->next=StayNode;
                }
                else{
                    StayNode=pNode;
                }
            }
            if(theLastStayNode==nullptr && StayNode!=nullptr) pHead=StayNode;
            theBeforeNode=pNode;
            pNode=pNode->next;
        }
        StayNode->next=nullptr;
        return pHead;
    }
};