博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Remove Duplicates from Sorted List I&&II
阅读量:5110 次
发布时间:2019-06-13

本文共 3663 字,大约阅读时间需要 12 分钟。

Remove Duplicates from Sorted List

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

For example,

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

这题思路很清楚,当前节点的值与前一节点的值相同,那么就直接删掉

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 ) return 0;13         ListNode* pre = head;   //前驱14         ListNode* cur = pre->next;  //当前15         while( cur ) {16             if( cur->val == pre->val ) {    //若与前驱相同,直接删掉17                 ListNode* p = cur;18                 cur = cur->next;19                 pre->next = cur;20                 delete p;21             } else {    //不同直接下移22                 cur = cur->next;23                 pre = pre->next;24             }25         }26         return head;27     }28 };

Remove Duplicates from Sorted List II

 
Total Accepted: 21273 Total Submissions: 85697

 

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 /** 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 ) return 0;13         const int INF = 0x3fffffff; //设置个不可能值14         ListNode node(-1);  //布置头节点,便于删除15         node.next = head;16         ListNode* pre = &node;17         ListNode* cur = head;18         int needDelete = INF;   //便于逻辑判断19         while( cur ) {20             if( cur->val == needDelete ) {  //若等于需被删除值,那么直接删除21                 ListNode* p = cur;22                 cur = cur->next;23                 pre->next = cur;24                 delete p;25             } else if( cur->next && cur->val == cur->next->val ) {  //若发现有重复元素,那么记录需要删除的值26                 needDelete = cur->val;27             } else {    //后移节点28                 cur = cur->next;29                 pre = pre->next;30             }31         }32         return node.next;33     }34 };

这里的不可能值,如果可能的话,那么就需要加逻辑判断,否则就会出大bug,尤其是面试官询问的话

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 ) return 0;13         ListNode node(-1);  //布置头节点,便于删除14         node.next = head;15         ListNode* pre = &node;16         ListNode* cur = head;17         while( cur && cur->next && cur->val != cur->next->val ) {18             pre = cur;19             cur = cur->next;20         }21         if( !cur->next ) return node.next;22         int needDelete = cur->val;23         while( cur ) {24             if( cur->val == needDelete ) {  //若等于需被删除值,那么直接删除25                 ListNode* p = cur;26                 cur = cur->next;27                 pre->next = cur;28                 delete p;29             } else if( cur->next && cur->val == cur->next->val ) {  //若发现有重复元素,那么记录需要删除的值30                 needDelete = cur->val;31             } else {    //后移节点32                 cur = cur->next;33                 pre = pre->next;34             }35         }36         return node.next;37     }38 };

 

转载于:https://www.cnblogs.com/bugfly/p/4010301.html

你可能感兴趣的文章
vue v-for下图片src显示失败,404错误
查看>>
腾讯元对象存储之文件删除
查看>>
jdk环境变量配置
查看>>
Hbase basic
查看>>
安装 Express
查看>>
包含列的索引:SQL Server索引的阶梯级别5
查看>>
myeclipse插件安装
查看>>
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
UVA 1602 Lattice Animals
查看>>
bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
查看>>
个人对vue生命周期的理解
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
存储(硬件方面的一些基本术语)
查看>>
Dithering-视觉的奇特现象
查看>>
观察者模式
查看>>
转】MyEclipse使用总结——MyEclipse文件查找技巧
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Memory and Trident(CodeForces 712B)
查看>>
Win磁盘MBR转换为GUID
查看>>