面試中常見鍊錶問題3 旋轉鍊錶

2021-07-13 04:08:39 字數 654 閱讀 1642

給定乙個單鏈表和乙個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 ...