1. 程式人生 > >【LeetCode】61. 旋轉連結串列

【LeetCode】61. 旋轉連結串列

題目描述

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

示例

輸入: 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

解決方法

首先k對連結串列長度取模,然後再進行處理

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution { public: ListNode* rotateRight(ListNode* head, int k) { //首先k對連結串列長度取模,然後再進行處理 if (!head || !head->next) return head; int len=0; //計算連結串列長度 ListNode *l1=head; while(l1){ len++; l1=l1->next; } k%=len;
if (k==0) return head; ListNode *ans=head; int n=len-k-1; while(n--) ans=ans->next; ListNode *temp=ans; ans=ans->next; temp->next=NULL; ListNode *result=ans; while(ans->next) ans=ans->next; cout<<
ans->val; ans->next=head; return result; } };