Leetocde : Rotate List

来源:互联网 发布:macbook air破解软件 编辑:程序博客网 时间:2024/06/06 10:51

题目连接:https://leetcode.com/problems/rotate-list/#/description

题目大意:

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.

解题思路:

类似的链表题目很多,有时间还是要整理一下,今天就是只是针对这个题给出解题思路。

  • 首先对链表进行遍历,遍历的目的有两个,第一就是获得链表有多少个节点;第二就是获得链表的结尾节点(也就是null的前一个节点)。
  • 然后进行链表的尾-首连接,也就是末尾节点的next指向head节点。
  • 第一次遍历已知链表的总共节点数 total,那么total-k便是链表左半部分的节点数left;
  • 从head开始找left个节点这样就找到了反转后新的尾节点,也就找到了新的head节点,则该问题解决。

注意 :可能存在total - k =0的情况,所以为了统一处理我把第一次遍历我把head指向了尾节点,这样如果是total-k==0的情况,正好把head往后移动一个节点。

下面给出代码:

public class Solution {    public ListNode rotateRight(ListNode head, int k) {        if(head==null) return head;        int total =1;        ListNode p=head,rear;        while(p.next!=null){            total++;            p=p.next;        }        p.next = head;        head = p;        if(k>total)            k=k%total;        int left = total-k;        p = head;            while(left>0){                left--;                p=p.next;            }            rear = p;            head = rear.next;        rear.next=null;        return head;    }}

运行结果:
这里写图片描述

0 0
原创粉丝点击