今天刷的算法题,中等难度,用了一个半小时没有达到LeetCode提交标准,老是超时,看了答案,理解了别人的解法,自己又写了几遍,算是有收获,继续加油
package test.java.first;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
/**
*给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
*
* 示例:
*
* 给定一个链表: 1->2->3->4->5, 和 n = 2.
*
* 当删除了倒数第二个节点后,链表变为 1->2->3->5.
* 说明:
*
* 给定的 n 保证是有效的。
*
* 进阶:
*
* 你能尝试使用一趟扫描实现吗?
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
*/
public class Third {
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
@Test
public void thirdTest(){
}
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre=new ListNode(0);
pre.next=head;
ListNode start=pre,end=pre;
while (n!=0){
start=start.next;
n--;
}
while (start.next!=null){
start=start.next;
end=end.next;
}
end.next=end.next.next;
return pre.next;
}
}