LeetCode(83): 刪除排序鏈表中的重復元素


Easy!

題目描述:

給定一個排序鏈表,刪除所有重復的元素,使得每個元素只出現一次。

示例 1:

輸入: 1->1->2
輸出: 1->2

示例 2:

輸入: 1->1->2->3->3
輸出: 1->2->3

解題思路:

移除有序鏈表中的重復項需要定義個指針指向該鏈表的第一個元素,然后第一個元素和第二個元素比較,如果重復了,則刪掉第二個元素,如果不重復,指針指向第二個元素。這樣遍歷完整個鏈表,則剩下的元素沒有重復項。

C++解法一:

 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 || !head->next) return head;
13         
14         ListNode *start = head;
15         while (start && start->next) {
16             if (start->val == start->next->val) {
17                 ListNode *tmp = start->next;
18                 start->next = start->next->next;
19                 delete tmp;
20             } else start = start->next;
21         }
22         return head;
23     }
24 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM