剑指offer系列——56.删除链表中重复的结点

Q:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
A:题目并不难,重要的是,可以在head前添加一个头结点,放置head被删的情况。

   ListNode *deleteDuplication(ListNode *pHead) {
        if (pHead == nullptr || pHead->next == nullptr)
            return pHead;
        ListNode *node = new ListNode(0);
        node->next = pHead;
        pHead = node;
        ListNode *temp = pHead;
        while (node->next != nullptr) {
            if (node->val == node->next->val) {
                while (temp->next != node)
                    temp = temp->next;
                while (node->next != nullptr && node->val == node->next->val)
                    node = node->next;
                if (node->next == nullptr) {
                    temp->next = nullptr;
                    break;
                }
                temp->next = node->next;
                node->next = nullptr;
                node = temp->next;
            } else {
                node = node->next;
            }
        }
        return pHead->next;
    }

猜你喜欢

转载自www.cnblogs.com/xym4869/p/12367412.html
今日推荐