Par traversée, trouvez le Nième nœud dans la liste chaînée
Exemple de code:
class Node {
public int val;
public Node next;
public Node(int val) {
this.val = val;
}
}
public class MyLinkedList {
public Node head;//普通引用,目的是让head一直指向当前列表的头
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;
}
public void display() {
//打印一个链表
Node cur = this.head;
while (cur != null) {
System.out.print (cur.val +" ");
cur = cur.next;
}
System.out.println();
}
public Node findN(int n) {
if (this.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;
}
Node cur = this.head;
int count =1;
while (count != n ) {
cur = cur.next;
count ++;
}
return cur;
}
//得到单链表的长度
public int size(){
Node cur = this.head;
int count =0;
while (cur != null ) {
cur = cur.next;
count++;
}
return count;
}
public static void main(String[] args) {
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.createLinked();
myLinkedList.display();
System.out.println("===================");
int n=4;
Node ret = myLinkedList.findN(n);
System.out.println("第" +n+ "个结点是" + ret.val);
}
résultat:
Pour résumer:
1. Puisque count et n sont comparés dans la boucle while, count commence à 1.
2. Considérer les trois facteurs suivants: ① si la liste chaînée est vide, ② si la valeur de n est raisonnable et ③ si n est supérieur à la longueur de la liste chaînée.