題目:兩個鍊錶生成相加鍊錶
《程式設計師**面試指南》第21題 p66 難度:士
★☆☆☆
本題依舊有2種解法。不過首先說明一下,如果採用將鍊錶轉成系統中int型別的數的方法,當鍊錶過長時,int型別會溢位。我一開始就採用了這個方法,上來直接就0/20用例通過。。
然後書上第1種解法是採用棧的結構,將2個鍊錶分別依次push到2個棧中,然後同時從棧頂彈出,此時即從原鍊錶的末端開始。彈出的2個數相加的同時需注意進製。最後,當2個棧都為空時,還需要再注意一下上一次有沒有進製。有進製則最高位為1。
書中題解**如下:
public node addlists1(node head1, node head2)
while (head2 != null)
int ca = 0;
int n1 = 0;
int n2 = 0;
int n = 0;
node node = null;
node pre = null;
while (!s1.isempty() || !s2.isempty())
if (ca == 1)
return node;
}
第2種解法和我的做法相同,就是首先將2個鍊錶反轉,然後同步遍歷兩個逆序後的鍊錶,生成相加鍊錶。
與第1種解法相同,在相加的過程中也需注意進製。同時當兩個鍊錶都遍歷完成後,還要關注進製資訊是否為1,為1則還要生成乙個值為1的新節點。
書中**如下:
public node addlists2(node head1, node head2)
if (ca == 1)
reverselist(head1);
reverselist(head2);
return node;
}public node reverselist(node head)
return pre;
}
兩個單鏈表生成相加鍊錶
題目 假設鍊錶中每乙個節點的值都在0 9之間,那麼鍊錶整體就可以代表乙個整數。例如9 3 7,代表937.給定兩個這種鍊錶的頭節點head1和head2,請生成代表兩個整數相加值的結果鍊錶。例如 9 3 7和6 3,相加結果為1 0 0 0 兩個單鏈表生成相加鍊錶 方法1 利用棧結構求解 publi...
兩個單鏈表生成相加鍊錶
題目 假設鍊錶中每乙個節點的值都在0 9之間,那麼鍊錶整體就可以代表乙個整數。例如 9 3 7,可以代表整數937.給定兩個兩個這種鍊錶的頭結點head1和head2,請生成代表兩個整數相加值的結果鍊錶。例如 鍊錶1為9 3 7,鍊錶2為6 3,最後生成新的結果鍊錶為1 0 0 0。public c...
兩個鍊錶生成相加鍊錶
假設鍊錶中每乙個節點的值都在 0 9 之間,那麼鍊錶整體就可以代表乙個整數。給定兩個這種鍊錶,請生成代表兩個整數相加值的結果鍊錶。例如 鍊錶 1 為 9 3 7,鍊錶 2 為 6 3,最後生成新的結果鍊錶為 1 0 0 0。示例1 9,3,7 6,3 struct listnode class so...