83. Remove Duplicates from Sorted List

仅供自己学习

 

思路:

这道题和昨天的题类似,只是上一道把所有重复的元素都删除掉,而这次留下最后一个重复元素。

这里可以想想我们是如何删除所有的重复元素的,我们将重复的元素用一个变量存储,然后从重复的第一个元素遍历后面的元素和这个变量比较,如果相等就去除,我们相当于把所有相同的元素都和这个变量比较然后相等,然后就可以删除所有的重复元素。

我们可以更改上次的代码,来获得这道题的解法。只需要把去除掉变量和while循环,只用一个if来判断时候和下一个元素相等即可,如果相等那么就cur->next=cur->next->next,那么下一个元素不等时,就会剩下最后一个重复的元素。

代码:

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

 

还有递归的方法。递归要明确我这个函数用来做什么,然后就将这件事重复n遍,即明确函数定义的功能。这里我们就要去掉重复的元素,那么我们遇到重复的元素应该跳过他,而返回重复元素next后的链表,然后如果相邻元素不相同,我们就让这个元素的next=以下一个元素做参数的函数返回链表。当一个元素等于下一个元素的return 其实是服务于上一个递归的相邻元素不等而next=return中的return。

和上次的题区别也在于用了一个变量来存储重复的元素值,用其他的重复元素值和他对比,然后就能去掉所有的了。

代码:

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

 

posted @ 2021-03-26 09:19  Mrsdwang  阅读(29)  评论(0)    收藏  举报