代码改变世界

Remove Duplicates from Sorted List

2015-03-16 11:02  笨笨的老兔子  阅读(117)  评论(0编辑  收藏  举报

删除一个有序单链表的重复节点

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

思路:两个指针,一前一后,前面指针的值与后面指针的值相等就往前,直到不同,后指针的下一个节点指向前指针,然后继续。
注意一下边界:

  • 头指针为空
  • 链表只有一个节点
  • 尾部需要处理

    1. class Solution {
    2. public:
    3. ListNode *deleteDuplicates(ListNode *head)
    4. {
    5. if (!head || !head->next)
    6. {
    7. return head;
    8. }
    9. ListNode* forward = head->next;
    10. ListNode* backward = head;
    11. while (forward-> next!= NULL)
    12. {
    13. if (forward->val == backward->val)
    14. {
    15. forward = forward->next;
    16. }
    17. else
    18. {
    19. backward->next = forward;
    20. backward = forward;
    21. forward = forward->next;
    22. }
    23. }
    24. if (backward->val == forward->val)
    25. {
    26. backward->next = NULL;
    27. }
    28. else
    29. {
    30. backward->next = forward;
    31. }
    32. return head;
    33. }
    34. };