栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。 尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。 遗憾的是,大多数编程语言没有针对尾递归做优化,
我理解的最少的比较次数是当一个有序表A的所有元素都大于另一个有序表B的所有元素时。
当A表中的第一个元素与B表中的所有元素比较一次,并发现该元素大于B表中的最大元素时,
A表剩下的所有元素都不需要再比较,直接依次添加在B表的末尾。
该过程一共比较了N次
总共有5行,所以有5个顶点。
在无向图里,矩阵里任意两个1为两个顶点的连线,总共有8对。所以边数为8。
import java.util.*;
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Main2 {
public ListNode plusAB(ListNode a, ListNode b) {
// write code here
ListNode result = new ListNode(-1);
ListNode resultCur = result;
//nextNum表示进位
int nextNum = 0;
while (a != null || b != null || nextNum != 0) {
//获取两个链表里 的值从而进行相加
int aval = (a != null)?a.val:0;
int bval = (b != null)?b.val:0;
//第一次的相加得出的进位要给第二次里加
int sum = aval+bval+nextNum;
//算出相加的产生的进位
nextNum = sum/10;
//算出要往新链表里加的值
int realSum = sum%10;
resultCur.next = new ListNode(realSum);
resultCur = resultCur.next;
//为第二次相加做准备
a = a!=null?a.next:null;
b = b!=null?b.next:null;
}
return result.next;
}
}