• lintcode-170-旋转链表


    170-旋转链表

    给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数

    样例

    给出链表1->2->3->4->5->null和k=2
    返回4->5->1->2->3->null

    标签

    基本实现 链表

    思路

    利用lintcode-166-链表倒数第n个节点的思路,旋转链表就是将此链表倒数第 k 个节点作为头结点,重新连接链表。
    不过 k 的取值可能大于链表长度,所以要先求出链表长度 len,并将 k%len 置为 k 的值

    code

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        /**
         * @param head: the list
         * @param k: rotate to the right k places
         * @return: the list after rotation
         */
        ListNode *rotateRight(ListNode *head, int k) {
            // write your code here
            if (k <= 0 || head == NULL) {
                return head;
            }
            
            int len = 0;
            ListNode *temp = head;
            while (temp != NULL) {
                temp = temp->next;
                len++;
            }
            ListNode *p1 = head, *p2 = head, *p3 = head;
            k = k % len;
            if (k == 0) {
                return head;
            }
            for (int i = 0; i < k; i++) {
                p1 = p1->next;
            }
            while (p1->next != NULL) {
                p1 = p1->next;
                p2 = p2->next;
                p3 = p3->next;
            }
            p2 = p2->next;
            p3->next = NULL;
            p1->next = head;
            return p2;
        }
    };
    
  • 相关阅读:
    最短路(Floyed、Dijkstra、Bellman-Ford、SPFA)
    查找技术
    简单线段树
    dfs
    bfs
    插件工具集合
    Web前端代码规范
    Javascript 判断手机横竖屏状态
    Git 笔记2
    git 笔记 1
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7277112.html
Copyright © 2020-2023  润新知