- 遍历:将一个集合中的每一个元素进行获取并查看
- 数组常用for循环,因为数组一般都是知道长度的
var arr = [1,2,3,4,5];function find(arr){ if (arr === null) return; <!--算法的写法中不允许出现报错行为,该严谨性判断须加上,常规编程中可以不添加该判断--> for(var i = 0; i < arr.length; i++){ consoe.log(arr[i]); }}//运行findfind(arr);//然后创建一个链表//function Node(value){ this.value = value; this.next = null;}var node1 = new Node(1);var node2 = new Node(2);var node3 = new Node(3);var node4 = new Node(4);var node5 = new Node(5);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;<!--遍历Node-->function findNode(root){ <!--传递链表只能传递根节点--> var temp = root; <!--不知道循环长度的时候使用while循环--> while(true){ if(temp !== null){ console.log(temp.value) }else{ break; } temp temp.next; }}findNode(node1);<!--打印的是1,2,3,4,5;-->findNode(node2);<!--打印的事2,3,4,5;因为在此链表中,根节点会从node2的地方开始;找不到node1-->
递归遍历(算法学习中较重要)
var arr = [1,2,3,4,5,6,7,8];function find(arr, i){ if(arr === null || arr.length <= i) return; console.log(arr[i]); find(arr, i + 1);}<!--运行find,此时的递归方式传递两个参数,第一个是遍历的数组,第二个是起始位置-->find(arr, 0);<!--创建一个链表-->function Node(value){ this.value = value; this.next = null;}var node1 = new Node(1);var node2 = new Node(2);var node3 = new Node(3);var node4 = new Node(4);var node5 = new Node(5);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;<!--递归遍历,必须有出口(return),否则会出现死循环,一般先找出口,再写递归-->function findNode(root){ if(root === null) return; console.log(root.value); <!--如果root为空直接返回;不为空则打印root的值;但是此时只能打印一个值;使用递归重新调用自身即可--> findNode(root.next);}findNode(node1);<!--打印的是1,2,3,4,5;-->findNode(node2);<!--打印的事2,3,4,5;因为在此链表中,根节点会从node2的地方开始;找不到node1-->
递归遍历链表常用,能够节省大量的开发时间;递归很少用于数组遍历;