题目要求
给定一个链表和一个整数n,移除链表的倒数第n个节点
假设给定的整数n在链表的范围内。
解题思路
如果先将链表遍历一遍,很容易移除数第n个元素。但是如果只能遍历一遍时,有一个很巧妙的办法是设置一个快指针,一个慢指针,当快节点到达链表末尾时,慢指针刚好到达倒数第n+1个节点。要实现这种思路,只要先将快指针移动n+1次,然后两个一起移动即可。
JAVA代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pro = dummy;
ListNode cur = dummy;
for(int i=0;i<n+1;i++)
cur = cur.next;
while(cur!=null){
cur = cur.next;
pro = pro.next;
}
pro.next = pro.next.next;
return dummy.next;
}
}
一点拓展:若个整数n的长度可以是任意的,就必须先计算除链表的长度,让后比较,进行相应的处理。