给你一个链表,删除链表的倒数第 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) {
ListNode nextnode;
ListNode node=head;
int a,b=0;
while(node!=null){
node=node.next;
b++;
}
node=head;
for(a=1;a<(b-n);a++){
node=node.next;
}
if(a>b-n){
head=head.next;
}
else{
nextnode=node.next;
node.next=nextnode.next;
nextnode.next=null;
}
return head;
}
}
示例代码:
/**
* 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 {
ListNode findfromend(ListNode head, int k){ //找到倒数第k个
ListNode p1 = head;
for (int i = 0; i < k; i++){
p1 = p1.next;
}
ListNode p2 = head;
while(p1 != null){
p1 = p1.next;
p2 = p2.next;
}
return p2;
}
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode p = findfromend(dummy, n+1); //找到前一个节点(倒数n+1)
p.next = p.next.next; //倒数第n个=倒数第n-1个
return dummy.next;
}
}