创建一个单链表,找到第n个节点、倒数第一个节点、倒数第二个节点。
代码:
//链表的实现
class Node{
int val;
public Node next;
//提供构造方法
public Node(){//无参
}
public Node(int val){//有参,new一个新节点时,必须给val一个值
this.val = val;
}
}
public class MySingleLinkedList {
public Node head;//表示链表的头,默认为null;
//创建一个链表
public void createLinked(){
this.head = new Node(12);
Node node2 = new Node(22);
Node node3 = new Node(32);
Node node4 = new Node(42);
head.next = node2;
node2.next = node3;
node3.next = node4;
}
//找到链表的第n个节点;
public Node FindN(int N){
Node head = this.head;
Node cur = this.head;
int count = 1;
if(head==null){//链表为空
System.out.println("链表为空");
return null;
}
if(N <0){
System.out.println("n不符合要求!");
return null;
}
if(N>size()){
System.out.println("n超出链表长度");
return null;
}
while (count != N ){
cur= cur.next;
count++;
}
return cur;
}
//找倒数第一个
public Node FindLastNode(){
Node cur = this.head;
if(head==null){
System.out.println("链表为空");
return null;
}
if(head.next == null){
System.out.println("只有一个节点!");
return null;
}
while (cur.next!= null){
cur= cur.next;
}
return cur;
}
//找倒数第二个
public Node FindLastTwoNode(){
Node cur = this.head;
if(head==null){
System.out.println("链表为空");
}
while (cur.next.next != null){
cur= cur.next;
}
return cur;
}
public static void main(String[] args) {
MySingleLinkedList mySingleLinkedList = new MySingleLinkedList();
mySingleLinkedList.createLinked();//返回值为node类型的头节点
mySingleLinkedList.display();
System.out.println("============");
int n=3;
int ret1 = mySingleLinkedList.FindN(n);
System.out.println(ret1.val);
System.out.println("============");
Node ret = mySingleLinkedList.FindLastNode();
System.out.println(ret.val);
System.out.println("============");
Node ret2 = mySingleLinkedList.FindLastTwoNode();
System.out.println(ret2.val);
}
运行结果: