链表的尾删依然分为空链表和非空链表,对于空链表来说,链表中没有节点无法删除,所以直接返回null,对于非空链表,要实现链表的尾删就要找到倒数第二个节点,让倒数第二个节点的next指向null,这样就实现了删除最后一个节点,最后返回链表的头节点head.
public class Node {
int val;
Node next=null;
Node(int val){
this.val=val;
}
}
public class PopBack {//链表的尾删
public static Node popBack(Node head){
//空链表
if(head==null) {
System.out.println("空链表无法删除");
return null;
}
//走到这里说明链表不为空,对非空链表的情况处理
Node last=head;
while(last.next.next!=null){
last=last.next;
}//循环结束后last指向倒数第二个节点
last.next=null;//让倒数第二个节点的next指向null,这样就删除了原来的最后一个节点
return head;//返回链表的头节点
}
public static void Print(Node head){
Node cur=head;
while(cur!=null){
System.out.print(cur.val+"-->");
cur=cur.next;
}
}
public static void main(String[] args) {
Node l1=new Node(1);
Node l2=new Node(2);
Node l3=new Node(3);
Node l4=new Node(4);
Node l5=new Node(5);
l1.next=l2;
l2.next=l3;
l3.next=l4;
l4.next=l5;
l5.next=null;
System.out.print("尾删前:");
Print(l1);
System.out.println("null");
System.out.print("尾删后:");
Print(popBack(l1));
System.out.println("null");
}
}