給定乙個單鏈表和乙個k值,把鍊錶向右旋轉k步,比如說1->2->3->4->5->null和k = 2,則返回4->5->1->2->3->null。
解析:(1)把鍊錶分割成兩部分,前半部的長度為len-k,後半部分的長度為k,其中len為鍊錶測長度。(2)把後一部分鍊錶的尾指標指向前一部分鍊錶的頭指標。返回後一部分的首指標即可。listnode* rotateright(listnode* head, int k)
//尾指標
listnode *tail = p;
k = k % len;
//把鍊錶分割成兩部分,前部分長度
int size = len - k;
if(size == 0 || size == len)
return head;
p = head;
int index = 1;
//獲得前半部的尾指標
while(p->next != null && index < size)
listnode *tmp = p->next;
p->next = null;
tail->next = head;
head = tmp;
return head;
}
鍊錶 旋轉鍊錶
力扣原題 definition for singly linked list.public class listnode class solution 計算鍊錶長度 int length 0 listnode cur head while null cur 模擬k輪鍊錶旋轉 for int i 0 ...
面試中常見鍊錶問題1 合併兩個有序鍊錶
給定兩個有序鍊錶,把這兩個鍊錶合併為乙個有序鍊錶。比如鍊錶1 3 5 null和鍊錶2 4 6 null。合併以後為1 2 3 4 5 6 null。方法一 迴圈迭代方法listnode mergetwolists listnode l1,listnode l2 else p p next if l...
(鍊錶)61 旋轉鍊錶
給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 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 ...