閱讀以下說(shuō)明和C函數(shù),填補(bǔ)代碼中的空缺(1)~(5),將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
函數(shù)ReverseList(LinkList headptr)的功能是將含有頭結(jié)點(diǎn)的單鏈表就地逆置。處理思路是將鏈表中的指針逆轉(zhuǎn),即將原鏈表看成由兩部分組成:已經(jīng)完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一個(gè)結(jié)點(diǎn),并將該結(jié)點(diǎn)插入已完成部分的表頭(頭結(jié)點(diǎn)之后),直到全部結(jié)點(diǎn)的指針域都修改完成為止。
例如,某單鏈表如圖4-1所示,逆置過(guò)程中指針s的變化情況如圖4-2所示。

圖4-2
鏈表結(jié)點(diǎn)類(lèi)型定義如下:
typedef struct Node {
int data;
struct Node *next,
} Node, *LinkList;
【C函數(shù)】
void ReverseList (LinkList headptr)
{ //含頭結(jié)點(diǎn)的單鏈表就地逆置,headptr為頭指針
LinkList p, s;
if ( (1) ) return; //空鏈表(僅有頭結(jié)點(diǎn))時(shí)無(wú)需處理
p= (2) ; //令p指向第一個(gè)元素結(jié)點(diǎn)
if (!p->next) return; //鏈表中僅有一個(gè)元素結(jié)點(diǎn)時(shí)無(wú)需處理
s = p->next; //s指向第二個(gè)元素結(jié)點(diǎn)
(3) = NULL; //設(shè)置第一個(gè)元素結(jié)點(diǎn)的指針域?yàn)榭?br />
while (s) {
p= s; //令p指向未處理鏈表的第一個(gè)結(jié)點(diǎn)
s= (4) ;
p -> next = headptr -> next; //將p所指結(jié)點(diǎn)插入已完成部分的表頭
headptr -> next = (5) ;
}
}