• remove-duplicates-from-sorted-list I&II——去除链表中重复项


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

    For example,
    Given1->1->2, return1->2.
    Given1->1->2->3->3, return1->2->3.

    PS:遍历,而后记录pre,并删除后续重复node

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *deleteDuplicates(ListNode *head) {
    12         ListNode *cur=head,*pre=NULL;
    13         while(cur!=NULL){
    14             if(pre==NULL){
    15                 pre=cur;
    16                 cur=cur->next;
    17                 continue;
    18             }
    19             ListNode *next=cur->next;
    20             if(pre->val==cur->val){
    21                 pre->next=next;
    22             }else
    23                 pre=cur;
    24             cur=next;
    25         }
    26         return head;
    27     }
    28 };

    II、

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

    For example,
    Given1->2->3->3->4->4->5, return1->2->5.
    Given1->1->1->2->3, return2->3.

    删除所有重复项。

    PS:循环比较next->val==cur->val,若next跳动则剔除cur至next之间的节点。否则右移left指针。

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *deleteDuplicates(ListNode *head) {
    12         if(head==NULL) return NULL;
    13         ListNode h(-1);
    14         ListNode *res=&h;
    15         res->next=head;
    16         ListNode *cur=head,*pre=NULL,*left=res;
    17         while(cur!=NULL){
    18             ListNode* next=cur->next;
    19             while(next!=NULL&&cur->val==next->val){
    20                 next=next->next;
    21             }
    22             if(next==cur->next){
    23                 left=cur;
    24             }else{
    25                 left->next=next;
    26             }
    27             cur=next;
    28         }
    29         return res->next;
    30     }
    31 };
  • 相关阅读:
    MySQL优化器 limit影响的case
    Innodb物理存储结构系列1
    Innodb 锁系列1 同步机制
    javascript变量作用域 全局及局部
    测试20160422
    python-推荐
    python问题:IndentationError:expected an indented block错误解决
    协同过滤(推荐方法)——数据挖掘
    教你在Excel里做GA的水平百分比图的详细步骤(图文教程)-成为excel大师(1)
    win7搭建ios开发环境
  • 原文地址:https://www.cnblogs.com/zl1991/p/7071952.html
Copyright © 2020-2023  润新知