zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    ASP.NET Core 微信支付(一)【统一下单 APIV3】
    ASP.NET Core 跨域
    快速排序
    希尔排序(插入式与位移式优化)
    选择排序和插入排序
    冒泡排序
    八皇后问题
    递归与迷宫回溯问题
    逆波兰计算器
    栈实现综合计算器
  • 原文地址:https://www.cnblogs.com/zl1991/p/7071952.html
Copyright © 2011-2022 走看看