知识点
链表,循环
解题思路
要找到倒数第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; } }