模型训练三要素:偏差、方差与验证集实战解析
2026/10/21 15:44:50
问题描述:
给定一个链表的头节点head,将链表每个节点向右移动k个位置。
示例:
输入:
head = [1,2,3,4,5],k = 2
输出:[4,5,1,2,3]
n,右移k位等价于右移k % n位;n,计算实际旋转步数k = k % n;n-k个节点),其下一个节点即为新头;packagelc61;classSolution{publicListNoderotateRight(ListNodehead,intk){if(head==null){returnhead;}intn=0;ListNodecount=head;while(count.next!=null){count=count.next;n++;}n++;if(n==1){returnhead;}k=k%n;if(k==0){returnhead;}intheadNum=n-k;inttailNum=n-k-1;ListNodetail;ListNodeoldHead=head;for(inti=0;i<tailNum;i++){head=head.next;}tail=head;head=tail.next;tail.next=null;ListNodelast=head;while(last.next!=null){last=last.next;}last.next=oldHead;returnhead;}publicclassListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=val;}ListNode(intval,ListNodenext){this.val=val;this.next=next;}}}减少分支判断,简化逻辑,合并变量声明,代码更紧凑:
classSolution{publicListNoderotateRight(ListNodehead,intk){if(head==null)returnnull;// 统计链表长度intsize=0;ListNodep=head,tail=null;while(p!=null){size++;tail=p;p=p.next;}// 计算实际旋转步数k%=size;if(k==0)returnhead;// 找到新的尾节点(第 size - k 个节点)ListNodenewTail=head;for(inti=1;i<size-k;i++){newTail=newTail.next;}// 断尾、接原头ListNodenewHead=newTail.next;newTail.next=null;tail.next=head;returnnewHead;}publicclassListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=val;}ListNode(intval,ListNodenext){this.val=val;this.next=next;}}}