一、题目1
二、思路
将当前循环节点的前n个节点存储下来,在遍历完成之后直接进行处理。
注意:1、长度为0,1;2、删除节点为第一个、倒数第一个、第二个、倒数第二个;特殊情况的处理。
三、代码
public class T0019 {
public static void main(String[] args) {
int[] nums = {1,2,3,4,5};
// int[] nums = {1};
ListNode head = new ListNode(nums[0]);
ListNode node = head;
for ( int i = 1; i < nums.length; i++ ){
node.next = new ListNode(nums[i]);
node = node.next;
}
node = removeNthFromEnd( head, 5);
while ( node != null ){
System.out.println(node.val);
node = node.next;
}
}
public static ListNode removeNthFromEnd(ListNode head, int n) {
//对一个不删除,输入为空,只输入一个节点的情况进行处理
if ( n == 0 || head == null )
return head;
else if ( head.next == null )
return null;
ListNode node = head; //用于迭代
ListNode bfRemove = head; //存储当前迭代的节点的前n个节点
int count = 0; //当前是第几个节点了
while ( node != null ){
count++;
//在当前节点有前n个节点之时对bfRemove进行迭代
if ( count > n+1 ){
bfRemove = bfRemove.next;
}
node = node.next;
}
// System.out.println( bfRemove.val + "\t" + count);
//对删除的节点是头结点这种特殊情况的处理
if ( count == n ){
bfRemove.val = bfRemove.next.val;
}
bfRemove.next = bfRemove.next.next;
return head;
}
}
//Definition for singly-linked list.
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ↩︎