当前位置: 首页 > 后端技术 > Java

LeetCode-061-RotateLinkedList

时间:2023-04-02 02:13:24 Java

RotateLinkedList题目描述:给你一个链表的头节点head,旋转链表,将链表的每个节点向右移动k个位置。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:双指针法首先,如果head为null或者head只有一个结点,直接返回head;遍历链表头得到链表的长度,根据k%长度计算toJump,toJump是移动到链表最前面实际需要多少bit,如果toJump为0,表示旋转后无需移动,直接返回头部。如果toJump大于0,则初始化first和last两个节点分别指向头节点,然后用双指针的方式获取需要移动的最后几位。具体过程如下:firstmovelast到链表的toJump位置;然后同时移动第一个和最后一个节点,直到最后一个节点的下一个不为空。最后,倒数第二个是空的。此时last为原链表的最后一个节点,first的下一个节点为新的头节点。此时初始化newHead为first的下一个节点,然后将first的下一个节点设置为空,first是新链表的最后一个节点,然后last指向原链表的头节点head,最后返回newHead为旋转后的链表。publicclassLeetCode_061{publicstaticListNoderotateRight(ListNodehead,intk){if(head==null||head.next==null){returnhead;}ListNodecur=head;//链接表的长度intlength=0;while(cur!=null){长度++;cur=cur.next;}//需要将倒数toJump位挪到head节点前面inttoJump=k%length;如果(toJump==0){返回头;}ListNodefirst=head,last=head;while(toJump>0){last=last.next;跳--;}while(last.next!=null){first=first.next;最后一个=最后一个。下一个;}ListNodenewHead=first.next;第一个.下一个=空;最后一个。下一个=头;返回新头;}publicstaticvoidmain(String[]args){ListNodehead=newListNode(0);head.next=newListNode(1);head.next.next=新列表号德(2);ListNodelistNode=rotateRight(head,4);while(listNode!=null){System.out.print(listNode.val+"");listNode=listNode.next;}}}【每日留言】今天只要你再努力一点,未来的明星就是你!