题解 | #调整牛群顺序#
调整牛群顺序
https://www.nowcoder.com/practice/a1f432134c31416b8b2957e66961b7d4
知识点
链表,循环
解题思路
要找到倒数第n个节点,我们可以先循环一遍得到链表节点总数m,目标节点就是就是第m - n个。
再遍历一遍节点,当到达目标节点位置时将目标节点单独保存,在链表中删除目标节点。
遍历完之后将目标节点放到链表最后的位置。
Java解法
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
public ListNode moveNthToEnd (ListNode head, int n) {
// write code here
int m = 0; //链表的总节点数
ListNode curr = head;
while(curr != null){ //寻找总节点数
m++;
curr = curr.next;
}
int l = m - n; //正向移动到末尾节点的下标
ListNode last = null; //需要移动到末尾的节点
ListNode curr2 = new ListNode(0);
curr2.next = head; //创建一个新节点
ListNode next = curr2.next;
ListNode ans = curr2; //可能第一个节点是目标节点,将最总结果指向curr2
while(next != null){
if(l-- == 0){ //找到目标节点,保存下来
last = next;
curr2.next = next.next;
} else {
curr2 = curr2.next;
}
next = next.next;
}
curr2.next = last; //将节点的最后设置为last
last.next = null;
return ans.next;
}
}
查看17道真题和解析