1.输入一个链表,反转链表后,输出新链表的表头。
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function ReverseList(pHead)
{
if(pHead==null){
return null
}
let pre = null;
let next = null;
while (pHead !== null) {
next = pHead.next;
pHead.next = pre
pre = pHead;
pHead = next;
}
return pre
}
1–>2–>3–>4–>5
null<–1 | 2–>3–>4–>5
- 一个接一个的反转方向,先用next保存pHead.next,也就是2,因为将pre赋值给pHead.next后(即换方向后),链表就断开了,需要保存该值。
- 后面的步骤就是后移pre和pHead,循环反转链表,直到pHead为空。
2.求给定的二叉树的前序遍历。
例如:
给定的二叉树为{1,#,2,3},
返回:[1,2,3].
备注;用递归来解这道题很简单,你可以给出迭代的解法么?
递归解法:
/*
* function TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/
/**
*
* @param root TreeNode类
* @return int整型一维数组
*/
var arr=[]
function preorderTraversal( root ) {
if(root!==null){
arr.push(root.val)
preorderTraversal(root.left)
preorderTraversal(root.right)
}
return arr
}
迭代解法:
/*
* function TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/
/**
*
* @param root TreeNode类
* @return int整型一维数组
*/
function preorderTraversal( root ) {
var arr = []
if(!root){
return arr
}
var stack = [root]
while(stack.length>0){
// 取第一个
let item = stack.shift()
arr.push(item.val)
if (item.right) {
stack.unshift(item.right)
}
if (item.left) {
stack.unshift(item.left)
}
}
return arr
}