棧是限定在一端進行插入與刪除的線性表,允許插入與刪除的一端稱爲棧頂,不允許插入與刪除的另一端稱爲棧底。棧按照“先進後出”(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;
}
}