LeetCode61旋轉鍊錶

2021-10-01 05:03:59 字數 1395 閱讀 9573

給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 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

首先,通過遍歷整個鍊錶,得到鍊錶的長度和鍊錶的尾結點,使用struct listnode *end變數將尾結點記錄下來,然後,將k對鍊錶長度求餘,得到實際旋轉次數,遍歷鍊錶,得到經過k次旋轉後鍊錶的頭結點

使用struct listnode *new_head變數將新的頭結點記錄下來。最後,將尾指標指向頭結點,使煉表成環,再將新的頭結點與前面的結點斷開,可得到經過k次旋轉後的鍊錶。

struct listnode*

rotateright

(struct listnode* head,

int k)

int len=1;

//沒有執行if語句,表示鍊錶不為空,可以直接將長度設為1

struct listnode *p;

//遍歷鍊錶,求長度,尋找旋轉後的頭結點

struct listnode *end;

//最後乙個元素

struct listnode *new_head;

//新的頭結點

p=head;

//使p指向第乙個結點

//遍歷鍊錶,求鍊錶的長度

while

(p->next!=

null

) end=p;

//儲存最後乙個元素

k=k%len;

//k對len求餘,得到實際旋轉次數

if(k==0)

p=head;

for(

int i=

0;i1;i++

) new_head=p->next;

//儲存新的頭結點

end->next=head;

//尾指標指向頭結點,形成環

head=new_head;

p->next=

null

;//斷鏈

return head;

}

leetcode 61 旋轉鍊錶

deciription 給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 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示例 ...

LeetCode61 旋轉鍊錶

很久沒有寫blog了,以至於很長一段時間我都忘記了我還有乙個csdn賬號。也就是每週參加以下leetcode周競賽,膜拜一下大佬,然後發現自己真的是蠢以及一無是處,想的辦法總是,非常蠢。一般就做簡單的題目,這道題是leetcode估計實在是看不下去了,給我email說邀請我做個演算法題,我看了一下,...

LeetCode 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...