Rotate List

简介:

题目大意

给出一个单链表,和一个K值,根据K值往右旋转,例如:

思路

先求出链表的长度size,其实按着倒数第K%size个位置旋转,这个位置即size-(K%size)

参考代码

复制代码
/**
 * 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(head == NULL || k < 0)
            return NULL;
        ListNode *tmp = head;
        int size = 0;
        while(tmp != NULL)
            {
                tmp = tmp->next;
                ++size;
            }
        k = size - (k % size);
        if(k == size)
            return head;
        k = k - 1;
        ListNode *rev = NULL;
        ListNode *pre = head;
        ListNode *token = head;
        ListNode *cur = head;
        int index = 0;
        while(index <= k && cur != NULL)
        {
            pre = cur;
            cur = cur->next;
            ++index;
        }
        rev = cur;
        if(cur == NULL)
            return head;
        while(cur->next != NULL)
            cur = cur->next;
        cur->next = token;
        pre->next = NULL;
        return rev;
    }
};
复制代码

注意

两段链表接在一起的时候,注意原来前半部分最后一个指针应当赋值为NULL

 





本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3647668.html,如需转载请自行联系原作者

相关文章
|
索引
LeetCode 61. Rotate List
给定链表,将列表向右旋转k个位置,其中k为非负数。
86 0
LeetCode 61. Rotate List
LeetCode 61:旋转链表 Rotate List
​给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 Given a linked list, rotate the list to the right by k places, where k is non-negative.
3103 0
[LeetCode]--61. Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL and k = 2, return 4-&gt;5-&gt;1-&gt;2-&gt;3-&gt;NULL
1043 0
[LeetCode] Rotate List
Well, in the case of a linked list instead of an array, the problem becomes easier. We just need to find the node that will be the new head of the lis...
719 0
Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1->2->3->4->5->NULL and k = 2,return 4->5->1->2->3->NULL. 注意:当给定的k为0的时候,不需要旋转。
897 0
|
6月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1018 1
|
5月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。