• Remove Duplicates from Sorted List II


    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

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

    要考虑多种情况比如:

    1->1->1->3->3->3->3,  

    1->1->1   

    1->2->2->3,

    1->2->2

    设置3个指针,前指针pre和前前指针prepre指向头结点,当前指pcur针指向头结点下一个指针。

    设置一个标志位FLAG,判断pcur和pre是否相等过。

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 struct ListNode* deleteDuplicates(struct ListNode* head) {
     9     struct ListNode* prepre;
    10     struct ListNode* pre;
    11     struct ListNode*  pcur;
    12     int flag = 0;                                 //标志位初始化为0
    13     if(head == NULL)
    14         return NULL;
    15     prepre = head;
    16     pre = head;
    17     pcur = head->next;
    18     while(pcur != NULL){
    19         if(pcur->val != pre->val && flag == 0){            //如果前指针和当前指针不相等,并且之间没有相同元素,3个指针都指向下一个
    20             prepre = pre;
    21             pre = pcur;
    22             pcur = pcur->next;
    23         }
    24         else if(pcur->val == pre->val){         //如果前指针和当前指针相等
    25             if(pcur->next == NULL){              //如果当前指针为最后一个元素
    26                 if(prepre == head && prepre->val == pcur->val)  //判断前前指针是否是头结点,并且和当前元素是否相等判断,比如1->1->1 
    27                     return NULL;
    28                 else{
    29                     prepre->next = NULL;
    30                     break;
    31                 }
    32             }
    33             flag = 1;
    34             pcur = pcur->next;
    35         }
    36         else if(pcur->val != pre->val && flag == 1){          //如果前指针和当前指针不相等,之间有相同元素   
    37             if(prepre == head && prepre->val == pre->val){     //判断前前指针是否是头结点并且和前指针是否相等2->2->2->3
    38                 head = pcur;
    39                 prepre = head;                                  
    40                 pre = pcur;
    41                 pcur = pcur->next;
    42                 flag = 0;
    43             }
    44             else{
    45                 prepre->next = pcur;
    46                 pre = pcur;
    47                 pcur = pcur->next;
    48                 flag = 0;
    49             }
    50         }
    51     }
    52     return head;
    53 }
  • 相关阅读:
    django ORM
    django扩展知识
    django视图层
    php常用四种算法
    文件操作函数
    PHP开发中数组操作大全
    php 字符 常用函数
    MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别
    $_SERVER
    PHP魔术方法和魔术常量
  • 原文地址:https://www.cnblogs.com/boluo007/p/5470852.html
Copyright © 2020-2023  润新知