C/C++教程

【leetcode】 61. 旋转链表

本文主要是介绍【leetcode】 61. 旋转链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

 

其实就是将链表从 第 size-k个位置截断,然后将后半部分拼接到前半部分。(其中size是链表的长度,k需要处理一下,k=size%k,如果k=0的话,就相当于是没有移动)

/**
 * 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) {
             ListNode cur = head,kNode=null,kNextNode=null,lastNode=null;
        int size = 0;
        while(cur!=null){
            size++;
            lastNode = cur;
            cur = cur.next;
        }
        if(size==0)
           return head;
        k = k%size;
        if (k==0)
            return head;
        k = size-k;
        cur = head;
        size = 0;
        while(cur!=null){
            size++;
            if (size==k){
                kNode = cur;
                kNextNode = cur.next;
                break;
            }
            cur = cur.next;
        }
        lastNode.next = head;
        kNode.next = null;
        return kNextNode;
        }
}

 

这篇关于【leetcode】 61. 旋转链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!