BM16 删除有序链表中重复的元素-II
生活随笔
收集整理的這篇文章主要介紹了
BM16 删除有序链表中重复的元素-II
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
描述
給出一個升序排序的鏈表,刪除鏈表中的所有重復(fù)出現(xiàn)的元素,只保留原鏈表中只出現(xiàn)一次的元素。
例如:
給出的鏈表為1→2→3→3→4→4→5, 返回1→2→5.
給出的鏈表為1→1→1→2→3, 返回2→3.
數(shù)據(jù)范圍:鏈表長度0≤n≤10000,鏈表中的值滿足 ∣val∣≤1000
要求:空間復(fù)雜度 O(n)O(n),時間復(fù)雜度 O(n)O(n)
進(jìn)階:空間復(fù)雜度 O(1)O(1),時間復(fù)雜度 O(n)O(n)
方法一(刪除重復(fù)元素后存儲,并創(chuàng)建)
時間復(fù)雜度o(n)
空間復(fù)雜度o(n)
import java.util.*;/** public class ListNode {* int val;* ListNode next = null;* }*/public class Solution {/*** * @param head ListNode類 * @return ListNode類*/public ListNode deleteDuplicates (ListNode head) {// write code hereif(head==null) return head;Collection<Integer> c=new ArrayList<Integer>();ListNode cur=head;int tem=1001; //初始化一個臨時變量while(cur!=null){while(cur!=null&&c.contains(cur.val)){ //如果list列表中有相同的元素tem=cur.val; //暫時存儲相同的元素cur=cur.next; //跳過相同的元素,遍歷下一個節(jié)點(diǎn)}if(tem!=1001){c.remove(tem); //刪除list列表中那個相同的元素}if(cur!=null&&!c.contains(cur.val)){ //如果當(dāng)前元素不在列表中,就加入列表中c.add(cur.val);cur=cur.next;}} // if(c.isEmpty()){ //可要可不要判斷一下 // return null; // }ListNode ph=new ListNode(0);ListNode pr=ph;for(Integer d:c){ //創(chuàng)建鏈表ListNode temp=new ListNode(d);temp.next=null;pr.next=temp;pr=pr.next;}return ph.next;} }方法二
在鏈表上遍歷,并直接刪除重復(fù)的元素
時間復(fù)雜度o(n)
空間復(fù)雜度o(1)
/*** struct ListNode {* int val;* struct ListNode *next;* };** C語言聲明定義全局變量請加上static,防止重復(fù)定義*/ /*** 代碼中的類名、方法名、參數(shù)名已經(jīng)指定,請勿修改,直接返回方法規(guī)定的值即可** * @param head ListNode類 * @return ListNode類*/ struct ListNode* deleteDuplicates(struct ListNode* head ) {struct ListNode* dummp = (int) malloc(sizeof(int));dummp->next = head; //空節(jié)點(diǎn)插入鏈表頭部struct ListNode* p = dummp;while(p->next && p->next->next){ //每次都是2個節(jié)點(diǎn)判斷if(p->next->val == p->next->next->val){ //存在重復(fù)節(jié)點(diǎn)int num_flag = p->next->val; //記錄第一個重復(fù)節(jié)點(diǎn)的值while(p->next && p->next->val == num_flag) //循環(huán)遍歷后續(xù)節(jié)點(diǎn)的值,并與記錄的節(jié)點(diǎn)值比較,相同則逐個刪除p->next = p->next->next;}else //本輪不存在重復(fù)節(jié)點(diǎn),值鏈表指針后移p = p->next;}return dummp->next; //返回結(jié)果 }總結(jié)
以上是生活随笔為你收集整理的BM16 删除有序链表中重复的元素-II的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BM15 删除有序链表中重复的元素-I
- 下一篇: BM22 比较版本号