單鏈表操作(一)

2022-06-24 05:21:10 字數 1302 閱讀 3134

將乙個帶有頭結點的單鏈表反向輸出

思想:每當訪問乙個結點時,先遞迴輸出它後面的結點

void reverselist(linklist &l)

printf("%d ",l->data);

}函式呼叫為:reverselist(l->next);不能從頭結點開始,不然也會輸出頭結點的的值

將乙個鍊錶(a1,b1,a2,b2,,,,an,bn)拆為兩個鍊錶(a1,a2,a3,,,an),(b1,b2,b3,,,bn);

void discrate1(linklist &l)

else

i++;

p=p->next;

}listprint(r);

listprint(s);

}

在乙個遞增的單鏈表中刪除相同的元素

void discrate2(linklist &l)//一定要加入判斷是否為最後乙個結點,不然下一句會引起報錯。

if(p->data==p->next->data)

p=p->next;}}

返回乙個有頭結點的鍊錶倒數第k個結點的值

思想:因為是高效的演算法要求一遍掃瞄就能得出結果,所以可以設定兩個指標p,q同時指向頭結點,p指標首先沿著鍊錶移動k個結點,然後q和p同時移動,當p指標指向最後乙個結點時,q恰好指向了倒數第k個結點。

我開始是直接遞迴到最後乙個結點然後返回找倒數第k個結點,但是這貌似不高效

int reversecount(linklist &l,int k)

while(p!=null)

if(count==k)

else return 0;

}找出個鍊錶存在相同結點的初始位置

思想:兩條鍊錶若有相同的結點,那麼並呈現出"y"狀,而不可能是"x"狀

void serchlist(linklist &l1,linklist &l2)

}else

}while(p1!=null)

p1=p1->next;

p2=p2->next;

j++;}}

void listlink(linklist &l1,linklist &l2)

p1->next=p2;

}//將乙個鍊錶與另乙個鍊錶末尾連線起來

單鏈表操作

include include typedef struct node tag node 建立不帶頭結點的單鏈表 node createnode else p q scanf d n 函式體結束,q指標變數被釋放,不能通過head引數帶回到呼叫函式 要把head帶回到呼叫函式,要把它定義為指向指標的...

單鏈表操作

include stdio.h include malloc.h include define n 10 代表要處理的元素個數 可以誰使用者的意思修改 define ok 1 define overflow 0 typedef int elemtype typedef int status type...

單鏈表操作

這一次補上鍊表的注釋,是空閒的時候敲出來的,如果有錯,希望幫忙糾正 部分給出了詳細說明,這裡只選取了基本操作,因為更複雜的鍊錶操作太繁瑣,這裡就不寫了 如果有什麼不懂的地方,可以隨時詢問 include using namespace std typedef int elemtype struct ...