题解 | #删除链表中重复的结点#

删除链表中重复的结点

http://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

O(n)时间复杂度实现链表重复节点删除问题
技巧:伪头结点、两层循环、判断是否找到了重复节点

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        // 1 2 3 3 4 4 5
        ListNode *yummyhead = new ListNode(-1);
        yummyhead->next = pHead;
        ListNode *pre = yummyhead;
        ListNode *post;

        while (pHead)
        {
            post = pHead->next;  // post要放在这里赋值,而不能放在循环体末尾赋值,是因为pHead可能为空
            // 寻找不重复的结点
            while (post && pHead->val == post->val) {
                post = post->next;
            }
            // 找到下一个不重复结点
            // 需要判断是否找到了重复结点,这里明显是没找到啊
            if (pHead->next == post) {
                pre = pHead;
            } else {
                pre->next = post;
            }
            pHead = post;  
        }
        return yummyhead->next;
    }
};
全部评论

相关推荐

团子 行业运营 n*15.5
点赞 评论 收藏
转发
头像
04-09 14:29
Java
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务