LeetCode61. ๆ่ฝฌ้พ่กจ๐๐๐ไธญ็ญ
่ฏพๅไฝไธ
้ฎ้ขๆ่ฟฐ
ๅๆ้พๆฅ๏ผ61. ๆ่ฝฌ้พ่กจ
็ปไฝ ไธไธช้พ่กจ็ๅคด่็น head ๏ผๆ่ฝฌ้พ่กจ๏ผๅฐ้พ่กจๆฏไธช่็นๅๅณ็งปๅจ k ไธชไฝ็ฝฎใ
็คบไพ 1๏ผ

่พๅ
ฅ๏ผhead = [1,2,3,4,5], k = 2
่พๅบ๏ผ[4,5,1,2,3]
็คบไพ 2๏ผ

่พๅ
ฅ๏ผhead = [0,1,2], k = 4
่พๅบ๏ผ[2,0,1]
ๆ็คบ๏ผ
- ้พ่กจไธญ่็น็ๆฐ็ฎๅจ่ๅด
[0, 500]ๅ -100 <= Node.val <= 1000 <= k <= 2 * 109
ไปฃ็ ๅฎ็ฐ
Java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head == null || head.next == null){
return head;
}
int n = 1;
ListNode temp = head;
while(temp.next != null){
n++;
temp = temp.next;
}
k = k % n;
if(k - n == 0){
return head;
}
temp.next = head;
//ๅฎไฝๅฐ็ฌฌ n - k ไธช่็น๏ผ็ถๅๆๅผใ
for(int i = 1; i < n - k; i++){
head = head.next;
}
ListNode newHead = head.next;
// ๆๅผ็ฏ
head.next = null;
return newHead;
}
}
Python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if head == None or head.next == None:
return head
n = 1
temp = head
while temp.next != None:
n += 1
temp = temp.next
k = k % n
if k - n == 0:
return head
temp.next = head
#ๅฎไฝๅฐ็ฌฌ n - k ไธช่็น๏ผ็ถๅๆๅผใ
for i in range(1, n - k):
head = head.next
newHead = head.next
# ๆๅผ็ฏ
head.next = None
return newHead
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head == nullptr || head->next == nullptr){
return head;
}
int n = 1;
ListNode* temp = head;
while(temp->next != nullptr){
n++;
temp = temp->next;
}
k = k % n;
if(k - n == 0){
return head;
}
temp->next = head;
//ๅฎไฝๅฐ็ฌฌ n - k ไธช่็น๏ผ็ถๅๆๅผใ
for(int i = 1; i < n - k; i++){
head = head->next;
}
ListNode* newHead = head->next;
// ๆๅผ็ฏ
head->next = nullptr;
return newHead;
}
};
Go
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func rotateRight(head *ListNode, k int) *ListNode {
if head == nil || head.Next == nil {
return head
}
//่ฎก็ฎ้พ่กจ้ฟๅบฆ
n := 1
temp := head
for temp.Next != nil {
n++
temp = temp.Next
}
//่ฐๆดK
k = k % n
if k - n == 0 {
return head
}
//ๅฝขๆ็ฏๅฝข้พ่กจ
temp.Next = head
//ๅฎไฝๅฐ็ฌฌ n - k ไธช่็น๏ผ็ถๅๆๅผใ
for i := 1; i < n-k; i++ {
head = head.Next
}
newHead := head.Next
// ๆๅผ็ฏ
head.Next = nil
return newHead
}