LeetCode61. ๆ—‹่ฝฌ้“พ่กจ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸไธญ็ญ‰

่ฏพๅŽไฝœไธš

้—ฎ้ข˜ๆ่ฟฐ

ๅŽŸๆ–‡้“พๆŽฅ๏ผš61. ๆ—‹่ฝฌ้“พ่กจ

็ป™ไฝ ไธ€ไธช้“พ่กจ็š„ๅคด่Š‚็‚น head ๏ผŒๆ—‹่ฝฌ้“พ่กจ๏ผŒๅฐ†้“พ่กจๆฏไธช่Š‚็‚นๅ‘ๅณ็งปๅŠจ k ไธชไฝ็ฝฎใ€‚

็คบไพ‹ 1๏ผš

img

่พ“ๅ…ฅ๏ผšhead = [1,2,3,4,5], k = 2
่พ“ๅ‡บ๏ผš[4,5,1,2,3]

็คบไพ‹ 2๏ผš

img

่พ“ๅ…ฅ๏ผšhead = [0,1,2], k = 4
่พ“ๅ‡บ๏ผš[2,0,1]

ๆ็คบ๏ผš

  • ้“พ่กจไธญ่Š‚็‚น็š„ๆ•ฐ็›ฎๅœจ่Œƒๅ›ด [0, 500] ๅ†…
  • -100 <= Node.val <= 100
  • 0 <= 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
}

ๅ‘่กจ่ฏ„่ฎบ

ๅŽๆ‰่ƒฝ่ฏ„่ฎบ