通过遍历,找到链表中的第N个结点
代码示例:
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);
}
结果:
总结:
1.由于while循环中是count和n比较,所以count要从1开始。
2.要把①链表是否为空,②n值是否合理,③n是否大于链表长度 这三种因素考虑进去。