1. 程式人生 > 其它 >ActiveMQ原始碼解析(一)建立連線

ActiveMQ原始碼解析(一)建立連線

題目:

給定一個連結串列,旋轉連結串列,將連結串列每個節點向右移動k個位置,其中k是非負數。

示例1:

輸入: 1->2->3->4->5->NULL, k = 2
輸出: 4->5->1->2->3->NULL
解釋:
向右旋轉 1 步: 5->1->2->3->4->NULL
向右旋轉 2 步: 4->5->1->2->3->NULL

示例2:

輸入: 0->1->2->NULL, k = 4
輸出: 2->0->1->NULL
解釋:
向右旋轉 1 步: 2->0->1->NULL
向右旋轉 2 步: 1->2->0->NULL
向右旋轉 3 步:0->1->2->NULL
向右旋轉 4 步:2->0->1->NULL

程式碼1:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9 * } 10 */ 11 class Solution { 12 public ListNode rotateRight(ListNode head, int k) { 13 //特殊情況特殊處理 14 if(head==null){return null;} 15 if(head.next==null){return head;} 16 17 ListNode p=head; //當連結串列長度大於k時,指向舊連結串列尾節點,當連結串列長度小於k時,指向新連結串列尾節點
18 ListNode pre=head; //當連結串列長度大於k時,新連結串列尾節點 19 ListNode tail=null; //指向舊連結串列尾節點 20 int t=0; 21 while(p.next!=null){ 22 p=p.next; 23 ++t; 24 if(p.next==null){tail=p;} //tail始終指向為節點 25 if(t>k){ //k小於連結串列長度 26 pre=pre.next; 27 }else if(p.next==null&&t==k){break;} 28 else{ //k比連結串列長度大 29 if(p.next==null){ 30 p=head; 31 ++t; 32 if(t==k){ 33 return head; 34 } 35 } 36 37 } 38 } 39 if(p.next==null){ //k小於連結串列長度情況 40 p.next=head; 41 head=pre.next; 42 pre.next=null; 43 } 44 else{//k大於連結串列長度情況 45 tail.next=head; 46 head=p.next; 47 p.next=null; 48 } 49 return head; 50 } 51 }

程式碼2: