题目描述
给定一个链表,删除链表的倒数第n个节点并返回链表的头指针
例如,给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1->2->3->5.备注:
题目保证n一定是有效的
请给出请给出时间复杂度为\ O(n) O(n)的算法
示例1
输入
{1,2},2输出
{2}
import java.util.*;/** public class ListNode {* int val;* ListNode next = null;* }*/public class Solution {/*** * @param head ListNode类 * @param n int整型 * @return ListNode类*/public ListNode removeNthFromEnd (ListNode head, int n) {// write code hereint len = 0;ListNode curNode = head;while(curNode!=null){len++;curNode = curNode.next;}//如果要删除逆向的n位置 是链表的头节点 直接返回next节点 如:{1,2} n=2 直接返回2if(len == n){return head.next;}//正向顺序 被删除节点的前一个节点int targetPos = len - n;int tmpPos = 0;ListNode tmpNode = head;while(tmpNode!=null){tmpPos++;//正向顺序 被删除节点的前一个节点if(tmpPos == targetPos){tmpNode.next = tmpNode.next.next;break;}tmpNode = tmpNode.next;}return head;}
}