leetcode的easy題之21merge two sorted lists要求合併兩個已經排好序的鏈式線性表。其實就是簡單的鍊錶操作。
但是由於自己各種操作不熟悉,這道題捯飭了一天。首先就是這個控制台輸入兩組數,分別建立兩個線性表這裡卡了很久。另乙個點就是把鍊錶接起來,這裡操作也不是很熟悉。以下就分這兩個點來總結記錄一下。
要求:兩組數以回車符'\n'
作為分隔標記,組內的數以空格作為分隔。
線性表的結構:
struct listnode;//這個相當於預設的建構函式
listnode(int x) :val(x), next(null){};
};
方法一:用cin.get()函式
listnode *l1;
int temp;
cin >> temp;
listnode first(temp);
l1 = &first;
listnode *p1 = &first;
while (cin >> temp)
}
這裡要補充說明的是:
1. 緊跟在數字後面的回車符才是有效回車符,要不然如果手賤在某個數字後面加了個空格才回車,這並不退出迴圈。我就一度在這個問題糾結了很久,因為沒有意識到自己加了空格,然後還以為程式出現了奇怪的問題。
2. 如果要用listnode *medal = new listnode
的話,需要使用的是listnode(){};
建構函式,如果不寫這個會發生錯誤「不存在預設的建構函式 」。如果用題目給的帶引數的建構函式,可以這樣寫listnode *medal = new listnode(temp)
。這裡的兩個知識點是:
-new 後面的東西實際上是個建構函式,而不是類的名字;
-當類裡面設定了帶引數的建構函式的時候,系統不再自動生成預設建構函式
方法二:用cin.peek()判斷
char clearbuffer[100];
char c;
listnode *l1;
int temp;
cin >> temp;
listnode first(temp);
l1 = &first;
listnode *p1 = &first;
bool inputend = false;
while (!inputend && cin >> temp)
}}
補充說明:
1.cin.peek()
的作用是判斷當前輸入的字元;
2.isspace()
函式判斷字元是不是whitespace字元,whitespace字元有很多:
space (0x20, 』 『)
form feed (0x0c, 『\f』)
line feed (0x0a, 『\n』)
carriage return (0x0d, 『\r』)
horizontal tab (0x09, 『\t』)
vertical tab (0x0b, 『\v』)
嚴蔚敏的資料結構課本上用帶頭結點的鍊錶,並且在合併的時候啟用了乙個新的頭結點lc和指向三個鍊錶的指標pa, pb, pc。整體思路是:一開始令lc = la,比較*pa和*pb的值,然後移動相應的指標,一直到la或者lb的列表為空,然後把剩下的繼續插到lc上去。
我自己的思路是沒有用到新的鍊錶,直接將l2插入到l1當中去,所以如果l1比較長的話,可以省去很多複製操作。而且我的鍊錶是沒有頭結點的,只有頭指標。具體實現如下:
(注意處理l1或者l2為空的情況)
listnode* mergelists(listnode *l1, listnode*l2)
else
if (p1==
null)
while (p1 !=
null
&& p2 !=
null)
else
p2->next = p1;
p1_pre = p2;
p2 = p2_temp;
}else
}//這種情況是l2比較長,把l2剩下資料都接到l1連表上
if (p1 ==
null)
return l1;
}
線性表的合併(有序)
define crt secure no warnings 1 include stdio.h include windows.h define maxsize 20 typedef struct a int hblist a b,a c,a d while blow b last clow c l...
線性表的合併 有序表(利用順序表)的合併
例1 求解一般集合的並集問題 問題描述 已知兩個集合 a 和 b 現要求乙個新的集合 a a u b 例如,設 a 7,5,3,11 b 2,6,3 合併後,a 7,5,3,11,2,6 問題分析 可以利用兩個線性表 la 和 lb 分別表示集合 a 和 b 即線性表中的資料元素為集合中的成員 這樣...
有序線性表的有序合併
對於這個問題其實想法很簡單,已經已知線性表是有序的,那麼我們只需要比較值的大小放入另外乙個陣列中或者直接輸出 要考慮的是兩個輸入序列的邊界問題。這個問題在 中注釋,也是常用的迴圈兩個線性表的方法。已知線性表 la 和 lb 中的資料元素按值非遞減有序排列,現要求將 la 和 lb 歸併為乙個新的線性...