• 剑指Offer——删除链表中重复的结点


    题目描述:

    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5


    分析:

     因为已经排好序了,所以如果相邻的数值一样的话,那么就跳过该数值,不过要记录前一结点的指针,将其next指向后一个没有重复的结点。

    代码:

     1 /*
     2 struct ListNode {
     3     int val;
     4     struct ListNode *next;
     5     ListNode(int x) :
     6         val(x), next(NULL) {
     7     }
     8 };
     9 */
    10 class Solution {
    11 public:
    12     ListNode* deleteDuplication(ListNode* pHead) {
    13         if(pHead == NULL) return NULL;
    14         ListNode* phead = NULL;
    15         ListNode* p1 = pHead;
    16         ListNode* p2 = NULL;
    17         while(p1) {
    18             if(p1->next) {
    19                 int val = p1->val;
    20                 if(val == p1->next->val) {
    21                     while(p1->next && p1->next->val == val) p1 = p1->next;
    22                 } else {
    23                     if(phead == NULL) phead = p2 = p1;
    24                     else {
    25                         p2->next = p1;
    26                         p2 = p1;
    27                     }
    28                 }
    29             } else {
    30                 if(phead == NULL) phead = p2 = p1;
    31                 else {
    32                     p2->next = p1;
    33                     p2 = p1;
    34                 }
    35             }
    36             if(p1 == NULL) break;
    37             p1 = p1->next;
    38         }
    39         if(p2) p2->next = NULL;
    40         return phead;
    41     }
    42 };
  • 相关阅读:
    集群、分布式、负载均衡区别与联系
    Android--加载大分辨率图片到内存
    Android--MP3播放器MediaPlayer
    Android--SoundPool
    Android--MediaPlayer高级
    Android--调用系统照相机拍照与摄像
    Android--SurfaceView播放视频
    Android--使用VideoView播放视频
    Android--使用Camera拍照
    Vue组件选项props
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747789.html
Copyright © 2020-2023  润新知