在鍊錶的插入刪除操作上理解起來比順序表更為容易,其不需要變動在i位置前的所有的元素,只需要修改節點指標即可。
插入:設在鍊錶的i位置插入新元素,設i-1節點的指標域為p,設插入的節點指標域為s,所以插入操作應該為:
s->next=p->next;將s的字尾改為p的字尾,p的字尾是原來的第i個點的指標域,將其給s的字尾說明此時的s是第i個節點的前乙個節點。
p->next=s;;將p的字尾改為s。
第一條語句是將s插在第i個之前,第二條語句將s放在第i-1個之後,因此完成了鍊錶的插入。(s->data=e)
刪除:設在第i個節點前刪除節點,設p為被刪除位置的前驅節點,q為被刪除位置的節點。因此插入操作為:
q=p->next;將q改為p的字尾節點,說明q即為要刪除的位置。
p->next=q->next;將p的字尾改為q的字尾,說明此時並沒有q這個節點了。
e=q->data;free(q);
第一句是申明刪除節點在p之後保證位置,第二句是刪除語句。
並不是很難理解,主要是弄清它們的前驅字尾關係,另外要刪除或插入首先要解決位置在哪的問題。
另外在這裡再寫上如何來尋找這樣的第i個位置:
while(p&&jp=p->next;
++j;
if(!p || j!=i-1)
return error;
此時的p即為刪除點的前驅了。
單鏈表插入刪除排序
package liu public class node public void setdata int data public int getdata public node getnext public void setnext node next package liu public cla...
單鏈表 建立插入刪除
建立乙個工程,在其中新增 list.h 標頭檔案,list.cpp原始檔和main.cpp原始檔。標頭檔案list.h中進行資料型別抽象 adt 宣告了乙個結構體和對應的操作,如下 ifndef list h define list h typedef struct list list 函式宣告 l...
單鏈表的插入刪除
include using namespace std struct lnode void creat link lnode head head指標的引用,lnode head 傳遞的是指標,但是對於指標的原值卻發生了copy,這樣你雖然可以對指標指向的記憶體進行修改但是不能對指標進行修改。因此要傳...