LeetCoce-61-Rotate List(链表/指针操作)-Medium

来源:互联网 发布:幼儿园美工课图片 编辑:程序博客网 时间:2024/05/15 01:54

题目理解:

假设先前的链表长度为n,求解将前n-k个元素移动到从k开始的链表之后的结果;


题目分析:

1. 注意k>n的情况(k=k%n);

2. 典型的指针操作;


解题代码:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode rotateRight(ListNode head, int k) {        ListNode ans=null;        if(head==null){            return ans;        }                int len=0;        ListNode p1=head.next;        while(true){            len++;            if(p1==null){                break;            }else{                p1=p1.next;            }        }                int moveK;        if(k<len){            moveK=k;        }else{            moveK=k%len;        }                if(moveK==0){            return head;        }                p1=head;        ListNode p2=p1.next;        for(int i=1; i<len-moveK;i++){            p1=p1.next;            p2=p1.next;        }                p1.next=null;                ans=p2;        p1=p2;        while(p1.next!=null){            p1=p1.next;        }                p1.next=head;                return ans;    }}


0 0