题目:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
解析:
题目要求删除链表的节点。
但是因为不能直接知道链表的长度,因此要先遍历一下链表,求出链表长度。
要删除的倒数第N个节点,也就是正序的(链表总长度len - N)个节点。
然后再遍历一次,直接删除目标节点即可。
代码:
/**
* 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) {
int m=0; //链表的总长度
ListNode count=head;
while(count!=null){ //遍历求长度
m++;
count=count.next;
}
ListNode new_head=new ListNode(-1); //定义虚拟头结点
new_head.next=head;
ListNode pre=new_head;
ListNode cur=head;
int i=m-n;
while(cur.next!=null && i>0){
pre=pre.next;
cur=cur.next;
i--;
}
ListNode temp=cur.next;
pre.next=cur.next;
cur=temp;
return new_head.next;
}
}