刪除單鏈表中重複的值(Java版),單鏈java

來源:互聯網
上載者:User

刪除單鏈表中重複的值(Java版),單鏈java
題目:刪除帶頭結點的單鏈表中重複值的元素(即讓每種值的元素只有一個)

解題思路:

用一個動態輔助儲存數組,每次要向輔助數組中放入元素時,讓輔助數組的長度加1,最長時與單鏈表一樣長,設一個指標p,讓它指向頭結點,從單鏈表中第一個元素開始,將它的值放入輔助數組中,然後依次訪問單鏈表後面的元素,用該元素的值與數組中所有已經被賦值的元素的值進行比較,如果不等於數組中任何元素的值,那麼讓p的next指向該結點的next指標,刪除該結點元素,否則令p指向p的next指標,並將當前訪問的節點元素的值依次放入輔助數組,一直訪問到單鏈表中的最後一個元素。


ADT定義:

//單鏈表的結點類class LNode{//為了簡化訪問單鏈表,結點中的資料項目的存取權限都設為publicpublic int data;public LNode next;}

演算法實現:

public class LinkListUtli {public static void deleteRepeatValue(LNode L){//如果單鏈表為空白,或者只有頭結點,或者頭結點後面只有一個元素時,不可能存在值重複的元素if(L==null||L.next==null||L.next.next==null) return;LNode p=L;//當前訪問結點的前一個結點LNode q=L.next;//當前訪問的結點int count=0;while(q!=null){count++;}int temp[]=new int[count];count=1;temp[count-1]=q.data;while(q.next!=null)//一直往下訪問,直到訪問單鏈表中的最後一個結點{q=q.next;//訪問下一個結點boolean flag=false;//用來標記當前訪問結點元素中的值是否與之前訪問結點元素的值相同for(int i=0;i<count;i++){if(q.data==temp[i]){p.next=q.next;flag=true;break;}}if(!flag){count++;temp[count-1]=q.data;q=q.next;//讓q往下走一步,保證p是下個訪問結點的前一個結點}}q=null;//此時q可能是已經釋放了的指標,如果不令它指向null,它會變成野指標}}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.