1. 程式人生 > >連結串列例題3:用基準值將連結串列分割槽

連結串列例題3:用基準值將連結串列分割槽

解題思路:

1.建立一個結點類。

2.建立一個分割方法。

3.宣告四個結點分別儲存小於基準值,大於或等於基準值(注意這裡是宣告結點,不是例項化結點,所以不算違規)。

 

四個宣告的結點為(定義四個結點是為了最後好進行連結在一起):

1.LHead,LTail用來儲存小於基準值的。

2.RHead,RTail用來儲存大於或等於基準值的。

 

假如連結串列如圖:

 

程式碼如下:

 1 public class PartitionLinkNode {
 2 
 3     public static void main(String[] args) {
4 int number[]= {5,6,3,2,1}; 5 ListNode head=new ListNode(); 6 ListNode p=head; 7 //陣列資料用連結串列的方式串連 8 for(int i=0;i<number.length;i++) 9 { 10 p.data=number[i]; 11 if(!(i+1==number.length)) 12 p=p.next=new ListNode();
13 } 14 15 ListNode head2=Partition(head,3); 16 ListNode p2=head2; 17 //遍歷輸出 18 while(p2!=null) 19 { 20 System.out.print(p2.data+" "); 21 p2=p2.next; 22 } 23 24 } 25 26 public static ListNode Partition(ListNode pHead,int
n) { 27 ListNode p=pHead; 28 ListNode LHead=null; //小於基準數的頭結點 29 ListNode LTail=null; //小於基準數的尾結點 30 ListNode RHead=null; //大於或等於基準數的頭結點 31 ListNode RTail=null; //大於或等於基準數的尾結點 32 while(p!=null) 33 { 34 int pValue=p.data; 35 if(pValue<n) 36 { 37 if(LHead==null) 38 { 39 LHead=LTail=p; 40 }else 41 { 42 LTail.next=p; 43 LTail=LTail.next; 44 } 45 }else { 46 if(RHead==null) 47 { 48 RHead=RTail=p; 49 }else 50 { 51 RTail.next=p; 52 RTail=RTail.next; 53 } 54 55 } 56 p=p.next; 57 } 58 59 if(LHead==null) 60 { 61 RTail.next=null; 62 return RHead; 63 }else { 64 LTail.next=RHead; 65 RTail.next=null; //注意這裡需要讓RTail的next為空,不然會無限迴圈 66 } 67 return LHead; 68 69 } 70 } 71 //結點類 72 class ListNode { 73 int data; 74 ListNode next; 75 76 public ListNode() {} 77 public ListNode(int data) 78 { 79 this.data=data; 80 } 81 }

 

結果: