將乙個帶有頭結點的單鏈表反向輸出
思想:每當訪問乙個結點時,先遞迴輸出它後面的結點
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 ...