王道2 06 單鏈表的插入 刪除

2021-10-08 21:19:23 字數 2154 閱讀 8622

線性表的插入刪除

2.指定結點後插操作

3.指定結點的前插操作

4.結點刪除

按位序插入: listinsert(&l,i,e) 在第i個位置插入元素e;

1.找到第2個結點,

2.用malloc申請乙個新的結點, 將第3個新結點7插入後面

3.對指標進行修改,

如果是有頭結點,可以把頭結點看成第0個結點,適用於上面三步

時間複雜度: 插到頭結點後面o(1)

插到最後o(n)

平均時間複雜度: o(n)

//定義結點

bool listinsert

(linklist &l,

int i,elemtype e)

/* 改變l */

/*i-1插入新結點*/

if(p==

null

)return false;

lnode *s;

//新的結點s;

s=(linklist)

malloc

(sizeof

(lnode));

/* 生成新結點 */

s->data=e;

/* 插入l中 */

s->next=p->next;

p->next=s;

return true;

}需要特殊處理在第乙個位置(i=1)插入的情況,即:插入到最最最前面

if

(i==1)

int j=1;

//j從1開始

相當於在1的基礎上找到i位置的結點,

尋找前驅結點,o(n)

1.e是引用型別&

2.最壞和平均時間複雜度是o(n);

最好是在第乙個位置,o(1)

3.找結點和上面一樣

/* 改變l */

if(p==

null

)return false;

/*---------------------------上面和插入是一樣的,找i-1個結點---------------------------------------*/

if(p->next==

null

)//i-1後面沒有結點了

return false;

lnode *q=p->next;

//新的結點q;

e=q->data;

p->next=q->next;

free

(q);

return true;

}

p   q
3 4 5 6 7 8

3 4 6 7 8

想刪除5,找5前面對那個數;p指向5前面那個數,q指向5;

lnode *q=p->next;

//新的結點q;

p->next=p->next->data;

p->next=q->next;

free

(q);

單鏈表插入刪除

在鍊錶的插入刪除操作上理解起來比順序表更為容易,其不需要變動在i位置前的所有的元素,只需要修改節點指標即可。插入 設在鍊錶的i位置插入新元素,設i 1節點的指標域為p,設插入的節點指標域為s,所以插入操作應該為 s next p next 將s的字尾改為p的字尾,p的字尾是原來的第i個點的指標域,將...

單鏈表的插入刪除

include using namespace std struct lnode void creat link lnode head head指標的引用,lnode head 傳遞的是指標,但是對於指標的原值卻發生了copy,這樣你雖然可以對指標指向的記憶體進行修改但是不能對指標進行修改。因此要傳...

單鏈表插入刪除排序

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...