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

链接:https://leetcode-cn.com/problems/rotate-list

思路:
1、这道题的首先遍历一遍链表,将链表的尾部和头部串联起来,并且获取到链表的长度
2、根据k、链表长度计算链表在哪个位置应该断开,断开后的下一个Node就是我们需要的结果

Python代码;

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        if not head:
            return head
        if k==0:
            return head
    
        ori_head = head
        n = 1
        while head.next:
            head = head.next
            n += 1
        head.next = ori_head  #  将列表前后连上
        move_num = n-k%n-1
        while move_num>0:
            ori_head = ori_head.next
            move_num -= 1
        new_head = ori_head.next
        ori_head.next = None  # 将列表断开

        return new_head

C++代码:

/**
 * 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) {
        if (not head){
            return head;
        }
        if (k==0){
            return head;
        }
        ListNode* ori_head = head;
        int n=1;
        while (head->next!=NULL){
            head = head->next;
            n += 1;
        }
        head->next = ori_head;
        int move_num = n - k%n -1;
        while(move_num>0){
            ori_head = ori_head->next;
            move_num -= 1;
        }
        ListNode* new_head = ori_head->next;
        ori_head->next = NULL;
        return new_head;
    }
};

你可能感兴趣的:(leetcode--61--旋转链表)