kevin55

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

给出一个已排序链表,删除所有重复的元素使每一个节点值只出现一次

思路:

1. 定义pCurNode,pNextNode两个节点指针;

2. pCurNode初始化为链表头节点指针;pNextNode初始化为下一节点

3. 判断pCurNode是否有效;

4. 判断相邻两个节点是否相同,如相同删除后一个相同的节点(其实就是将pCurNode的next指针指向删除节点的下一节点即可),再循环比较原来删除节点后的节点值是否相同。如(1, 1)、(1,1, 1);

5. 如相邻两个节点不同,则将当前节点指针后移一个节点;

6. 重复3、4、5;

class Solution
{
public:
    ListNode* deleteDuplicates(ListNode* head) 
    {
        ListNode* pCurNode = head;
        ListNode* pNextNode = nullptr;
        while (pCurNode)
        {
            pNextNode = pCurNode->next;
            if (pNextNode&&pNextNode->val == pCurNode->val)
            {
                pCurNode->next = pNextNode->next;
            }
            else
            {
                pCurNode = pNextNode;
            }
        }

        return head;
    }

    void Print(ListNode* head)
    {
        ListNode* pCurNode = head;
        while (pCurNode)
        {
            printf(" %d", pCurNode->val);
            pCurNode = pCurNode->next;
        }

        printf("\n");
    }
};

 

posted on 2016-01-19 22:21  kernel_main  阅读(169)  评论(0编辑  收藏  举报