给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
思路:先找出链表的总长度,然后把length-n个结点删除就行了,然后用但是最开始做的时候一直把头节点设置为head,导致有些特殊情况时候会存在空指针异常的情况,看了别人的代码发现将头节点设置到head的前一位,然后a.next指向head就可以完美的解决了。
/**
* 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 a = new ListNode(-1); //新设置一个结点a
a.next = head; //新节点指向head
int length = 0;
while(head != null){ //寻找链表的长度
length ++;
head = head.next;
}
head = a; //头节点给head
length -= n;
while(length > 0){ //再次遍历
length --;
head = head.next;
}
head.next = head.next.next; //删除这个结点
return a.next;
}
}