零基礎(chǔ)python刷leetcode -- 2. Add Two Numbers

算法很重要赤兴,但是每天也需要學(xué)學(xué)python斗躏,于是就想用python刷leetcode 的算法題禀综,和我一起開始零基礎(chǔ)python刷leetcode之旅吧击胜。

2. Add Two Numbers

image.png

首先過(guò)一下python的一些基礎(chǔ)知識(shí),非小白請(qǐng)直接跳過(guò)

鏈表

從提示代碼可以看出這里涉及到單鏈表結(jié)構(gòu)桦沉,代碼如下:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
  • 鏈表由于不必須按順序存儲(chǔ)每瞒,鏈表在插入的時(shí)候可以達(dá)到O(1)的復(fù)雜度,但是查找一個(gè)節(jié)點(diǎn)或者訪問(wèn)特定編號(hào)的節(jié)點(diǎn)則需要O(n)的時(shí)間纯露。

  • 使用鏈表結(jié)構(gòu)可以克服數(shù)組需要預(yù)先知道數(shù)據(jù)大小的缺點(diǎn)剿骨,鏈表結(jié)構(gòu)可以充分利用計(jì)算機(jī)內(nèi)存空間,實(shí)現(xiàn)靈活的內(nèi)存動(dòng)態(tài)管理埠褪。

  • 但是鏈表失去了數(shù)組隨機(jī)讀取的優(yōu)點(diǎn)

  • 同時(shí)鏈表由于增加了結(jié)點(diǎn)的指針域浓利,空間開銷比較大。

鏈表最明顯的好處就是钞速,常規(guī)數(shù)組排列關(guān)聯(lián)項(xiàng)目的方式可能不同于這些數(shù)據(jù)項(xiàng)目在記憶體或磁盤上順序贷掖,數(shù)據(jù)的存取往往要在不同的排列順序中轉(zhuǎn)換。鏈表允許插入和移除表上任意位置上的節(jié)點(diǎn)玉工,但是不允許隨機(jī)存取羽资。鏈表有很多種不同的類型:單向鏈表 雙向鏈表 以及 循環(huán)鏈表 。鏈表可以在多種編程語(yǔ)言中實(shí)現(xiàn)遵班。

鏈表是數(shù)據(jù)結(jié)構(gòu)中最基本常用的屠升,C++語(yǔ)言中單鏈表是利用指針操作實(shí)現(xiàn)的,python作為面向?qū)ο缶幊痰南林#梢允褂脛?chuàng)建一個(gè)ListNode類來(lái)實(shí)現(xiàn)鏈表腹暖,利用類的屬性引用來(lái)代替指針操作。

鏈表

表頭翰萨,指針脏答,結(jié)點(diǎn)等概念請(qǐng)自行百度。

下面我們創(chuàng)建了一個(gè)節(jié)點(diǎn)類亩鬼,然后編寫了幾個(gè)鏈表操作殖告,包括創(chuàng)建,插入雳锋,刪除黄绩,輸出等。代碼如下:

class ListNode():     # 初始化 構(gòu)造函數(shù)  
    def __init__(self,value):  
        self.value=value  
        self.next=None
  
def Creatlist(n):  
    if n<=0:  
        return False  
    if n==1:  
        return ListNode(1)    # 只有一個(gè)節(jié)點(diǎn)  
    else:  
        root=ListNode(1)  
        tmp=root  
        for i in range(2,n+1):       #  一個(gè)一個(gè)的增加節(jié)點(diǎn)  
            tmp.next=ListNode(i)  
            tmp=tmp.next  
    return root            # 返回根節(jié)點(diǎn)  
  
def printlist(head):       # 打印鏈表 (遍歷) 
    p=head  
    while p!=None:  
        print p.value  
        p=p.next  
  
def listlen(head):       # 鏈表長(zhǎng)度  
    c=0  
    p=head  
    while p!=None:  
        c=c+1  
        p=p.next  
    return c  
  
def insert(head,n):         # 在n的前面插入元素  
    if n<1 or n>listlen(head):  
        return  
  
    p=head  
    for i in range(1,n-1):  # 循環(huán)四次到達(dá) 5  (只能一個(gè)一個(gè)節(jié)點(diǎn)的移動(dòng) range不包含n-1)
        p=p.next  
    a=raw_input("Enter a value:")  
    t=ListNode(value=a) 
    t.next=p.next   
    p.next=t   
    return head       
  
def dellist(head,n):  # 刪除鏈表  
    if n<1 or n>listlen(head):  
        return head  
    elif n is 1:  
        head=head.next   # 刪除頭  
    else:  
        p=head  
        for i in range(1,n-1):    
            p=p.next     # 循環(huán)到達(dá) 2次   
        q=p.next  
        p.next=q.next    # 把5放在3的后面  
    return head  
  
  
def main():  
    print "Create a linklist"  
    head=Creatlist(7)  
    printlist(head)  
    print  
    print "___________________________"  
  
    n1=raw_input("Enter the index to insert")  
    n1=int(n1)  
    insert(head,n1)  
    printlist(head)  
    print  
    print "___________________________"  
  
    n2=raw_input("Enter the index to delete")  
    n2=int(n2)  
    dellist(head,n2)  
    printlist(head)  
  
  
if __name__=='__main__':  main()   # 主函數(shù)調(diào)用  

題目

這道題目是要將兩個(gè)單鏈條相加玷过。輸出得到的新鏈條爽丹。

類似加法的原理, 我們從低位(鏈條第一位)開始,同位相加辛蚊,滿10高位+1

        ans = ListNode(0)
        tmp = ans
        tmpsum = 0
        while True:
            #依次遍歷l1 l2粤蝎,對(duì)應(yīng)位相加
            if l1 != None:
                tmpsum += l1.val
                l1 = l1.next
            if l2 != None:
                tmpsum += l2.val
                l2 = l2.next
            tmp.val = tmpsum % 10     # 除10取余作為當(dāng)前位的值
            tmpsum //= 10                #除10取整,即高位袋马,作為指針的下個(gè)結(jié)點(diǎn) 進(jìn)行加法運(yùn)算
            if l1 == None and l2 == None and tmpsum == 0:
                break
            tmp.next = ListNode(0)
            tmp = tmp.next
        return ans
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末初澎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子虑凛,更是在濱河造成了極大的恐慌碑宴,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卧檐,死亡現(xiàn)場(chǎng)離奇詭異墓懂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)霉囚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門捕仔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人盈罐,你說(shuō)我怎么就攤上這事榜跌。” “怎么了盅粪?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵钓葫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我票顾,道長(zhǎng)础浮,這世上最難降的妖魔是什么帆调? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮豆同,結(jié)果婚禮上番刊,老公的妹妹穿的比我還像新娘。我一直安慰自己影锈,他們只是感情好芹务,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸭廷,像睡著了一般枣抱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辆床,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天佳晶,我揣著相機(jī)與錄音,去河邊找鬼佛吓。 笑死宵晚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的维雇。 我是一名探鬼主播淤刃,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吱型!你這毒婦竟也來(lái)了逸贾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤津滞,失蹤者是張志新(化名)和其女友劉穎铝侵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體触徐,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咪鲜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撞鹉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疟丙。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸟雏,靈堂內(nèi)的尸體忽然破棺而出享郊,到底是詐尸還是另有隱情,我是刑警寧澤孝鹊,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布炊琉,位于F島的核電站,受9級(jí)特大地震影響又活,放射性物質(zhì)發(fā)生泄漏苔咪。R本人自食惡果不足惜锰悼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悼泌。 院中可真熱鬧松捉,春花似錦夹界、人聲如沸馆里。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸠踪。三九已至,卻和暖如春复斥,著一層夾襖步出監(jiān)牢的瞬間营密,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工目锭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留评汰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓痢虹,卻偏偏與公主長(zhǎng)得像被去,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奖唯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容