ActiveMQ原始碼解析(一)建立連線
阿新 • • 發佈:2020-12-25
題目:
給定一個連結串列,旋轉連結串列,將連結串列每個節點向右移動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 }