这篇也是凑数的 ....
描述 :
给定一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点
题目 :
LeetCode 删除链表的倒数第Nge节点 :
LCR 021. 删除链表的倒数第 N 个结点
分析 :
首先创建一个虚拟节点(哨兵节点) , 虚拟节点下一节点指向头节点这样我们移动元素的时候比较方便 , 用快慢指针的方式slow节点和fast节点指向虚拟节点 , fast指针比倒数第n个元素多走一步流出删除的节点 , 这样slow.next = slow.next.next 就删除了倒数第n个节点最后返回newNode.next节点也就是head节点 但是直接返回head节点会有一点问题 , 这里有什么问题 ?小伙伴们自己思考一下 .
例子 : 1,2,3,4,5 删除倒数第2个元素
例 : 1,2 删除倒数第一个元素
解析 :
LeetCode
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode newNode = new ListNode(-100);
newNode.next = head;
ListNode slow = newNode;
ListNode fast = newNode;
for(int i = 0;i<= n ;i++){
fast = fast.next;
}
while(fast != null){
slow = slow.next;
fast = fast.next;
}
slow.next = slow.next.next;
return newNode.next;
}
}