靜態鍊錶,找出兩條鍊錶的首個公共結點。
基礎題。最巧妙點在於設乙個int型變數flag
,然後2次遍歷——第一次遍歷第一條鍊錶(全部結點的flag改從false改為true),第二次遍歷第二條鍊錶,如果當前結點的flag是true則馬上break跳出for迴圈(千萬別忘了break!!),當然也可以直接return就好了。
注意點:
(1)用map容易超時;輸出格式用%05d——不足5位的整數的高位補0;
(2)由於scanf
使用%c格式時是可以讀入空格的,所以讀入當前位址、資料、後繼位址時,scanf的格式不能寫成%d%c%d,而要寫成%d %c %d。
#include
#include
#include
using
namespace std;
const
int maxn=
100010
;struct nodenode[maxn]
;int
main()
int p;
for(p=s1;p!=-1
;p=node[p]
.next)
for(p=s2;p!=-1
;p=node[p]
.next)
if(p!=-1
)else
system
("pause");
}
(1)定義靜態鍊錶。
(2)for迴圈對靜態鍊錶的每個結點的某元素初始化。
(3)遍歷鍊錶,計數:
int p=begin,count=0;
while
(p!=-1
)
(4)很多時候題目給出的結點並不都是有效結點(即可能存在不在鍊錶上的結點),對陣列進行排序從而把有效結點移到陣列左端。
bool
cmp(node a,node b)
else
}
PAT A1032 Sharing(靜態鍊錶)
include include include include include include include include include includeusing namespace std define maxn 100010 struct nodenode maxn int main fo...
部分鍊錶題
include bool insert last list ls,data data tmp next node return true void display list ls printf n list createlist 建立鍊錶 ls head next null 空鍊錶 return l...
鍊錶題思路
2 兩數相加 為了避免兩個輸入鍊錶同時為空,建立乙個 dummy 結點,將兩個結點相加生成的新結點按順序加到 dummy 結點之後,由於 dummy 結點本身不能變,所以用乙個指標 cur 來指向新鍊錶的最後乙個結點。取當前結點值的時候,先判斷一下,若為空則取0,否則取結點值。然後把兩個結點值相加,...