劍指offer之面試題17 合併兩個排序的鍊錶

2021-07-11 09:43:49 字數 1148 閱讀 2285

題目描述

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

思路:養成好習慣,一旦有鍊錶作為形參傳遞,都要對鍊錶是否為空做判斷,防止空指標異常,至於怎麼處理,稍後會講。當鍊表都不為空時,比較兩個鍊錶的頭結點值的大小,較小者作為新的頭結點儲存,(不妨設較小的頭結點來自list1)然後list1的下乙個結點作為list1的乙個新的頭結點與list2的頭結點比較,…,像是乙個遞迴操作。遞迴出口:當乙個鍊錶為空時結束,然後此時直接返回不為空的鍊錶的剩下的結點(這裡對鍊錶為空的處理做了說明,即當list1為空時,返回list2;反之,返回list1)。

牛客網oj**如下:

public

class solution

}*/public

static listnode merge(listnode list1,listnode list2)

else

return pmergehead;

}/*public

static

void printlsit(listnode head)

}public

static

void main(string args)

}list2.add(new listnode(2));

list2.add(new listnode(4));

list2.add(new listnode(6));

for(int i=0;iif(i+1

1); }

}printlsit(merge(list.get(0),list2.get(0)));

}*/}

非遞迴做法,也要熟悉

public

class solution else

mergelist=curnode;

while(list1 != null && list2 != null)else

}if(list1!=null)curnode.next=list1;

if(list2!=null)curnode.next=list2;

return mergelist;

}}

劍指offer 面試題17

題目 合併兩個排序的單向鍊錶 自己所寫 如下 listnode mergesortedlists listnode phead1,listnode phead2 listnode mergetwolist listnode pfirst,listnode psecond if phead pnext...

劍指offer之面試題9 4 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 用數學歸納的思想分析,得出規律。牛客網提交 public class solution if target 2 return init target int...

劍指offer之面試題16 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。思路 借助圖形來分析一下反轉鍊錶需要改變哪些指標。假設某一時刻,經過若干操作,我們已經把h點之前的指標調整完畢,現在反轉i指標指向的結點。由圖可知,為了防止指標的斷開,需要儲存i的next指標,為了完成反轉,需要知道i的前乙個指標prev,當然...