注释:当从链表第一个开始读,直到读到最后一个,让k不断地减一。k>0说明没什么可以删的,返回head即可,k=0,说明删头节点,k>0时,再从头开始读,k逐渐+1,直到k=0,那个便是要删除的前一个节点
public class Node {
public int vaule;
public Node next;
public Node(int data){
vaule=data;
}
}
public static Node removeLastKthNode(Node head,int lastKth){
if(head==null||lastKth<1){
return head;
}
Node cur=head;
while (cur!=null){
lastKth--;
cur=cur.next;
}
if(lastKth==0){
head=head.next;
}
if(lastKth<0){
cur=head;
while (++lastKth!=0){
cur=cur.next;
}
cur.next=cur.next.next;
}
return head;
}
双向链表:
public class DoubleNode {
public int vaule;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data){
vaule=data;
}
}
public static DoubleNode removeLastKthNode(DoubleNode head,int lastKth){
if(head==null||lastKth<1){
return head;
}
DoubleNode cur=head;
while (cur!=null){
lastKth--;
cur=cur.next;
}
if(lastKth==0){
head=head.next;
head.last=null;
}
if(lastKth<0){
cur=head;
while (++lastKth!=0){
cur=cur.next;
}
DoubleNode newNext=cur.next.next;
cur.next=newNext;
if(newNext!=null){
newNext.last=cur;
}
}
return head;
}