題目地址 https://www.acwing.com/problem/content/description/27/算法
來源:劍指Offerspa
題目描述
在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留。code
樣例blog
樣例1 輸入:1->2->3->3->4->4->5 輸出:1->2->5 樣例2 輸入:1->1->1->2->3 輸出:2->3
算法1
這是投機取巧的作法
在時間和空間不太要求的狀況下
可以使用STL進行unique的操做
遍歷鏈表 將元素放進map
在遍歷map將不重複的元素放進鏈表
注意邊界條件排序
C++ 代碼ip
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: map<int,int> s; ListNode* deleteDuplication(ListNode* head) { ListNode* p = head; //邊界狀況直接返回 if(p == NULL) return p; //將鏈表數值放入map 讓容器自動去重 while(p != NULL){ s[p->val]++; p = p->next; } p = head; ListNode* pre=head; //遍歷容器 再次放入鏈表 for(auto& e:s){ if(e.second == 1){ p->val = e.first; pre = p; p = p->next; } } //多餘的鏈表刪除 這裏直接NULL 沒有釋放 pre->next=NULL; //注意邊界條件 if(pre == head) return NULL; return head; } };
做者:defddr
連接:https://www.acwing.com/solution/AcWing/content/2877/
來源:AcWing
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。get