單鏈表的插入是找到要插入位置的前一個結點的位置,而後用指針將它們從新的鏈接在一塊兒。單鏈表的刪除是找到要插入位置的前一個結點的位置,而後斷開刪除的指針,從新將當前指針與刪除的指針的下一個元素鏈接在一塊兒,最後釋放刪除元素的內存空間。詳情請看下面的代碼:ios
#include <iostream> #include <stdio.h> #include <stdlib.h> //按位序插入單鏈表(帶頭節點) bool ListInsert(LinkList &L,int i,int e){ if(i<1){ return false; } LNode *p;//指向當前表結點的指針 int j = 0;//當前p指向的是第幾個結點 p = L;//L指向頭結點,p也指向頭結點.頭結點不存任何數據 if(p!=NULL&&j<i-1){ p = p->next; j++; } /* if(p==NULL){//i值不合法(可能超出單鏈表的長度) return false; } LNode *s = (LNode*)malloc(sizeof(LNode)); s->data = e;//將結點的值存入s結點中 s->next = p->next;//將s結點鏈接到p的下一個結點上 p->next = s;//將p結點鏈接到s結點上 (上下兩句位置不可換) */ return InsertNextNode(p,e); } //指定結點後插操做 bool InsertNextNode(LNode *p,int e){ if(p==NULL){//當前p指針指向的結點正常指向下一個結點 return false; } LNode *s = (LNode *)malloc(sizeof(LNode)); if(s==NULL){//內存不足 return false; } s->data = e;//存放數據 s->next = p->next; p->next = s;//將s鏈接 return true; } //指定結點前插操做 bool InsertPriorNode(LNode *p,int e){ if(p==NULL){ return false; } LNode *s = (LNode *)malloc(sizeof(LNode)); if(s==NULL){ return false; } s->next = p->next;//鏈接結點 p->next = s; s->data = p->data;//交換數據 p->data = e; } //按位序刪除單鏈表(帶頭節點) bool ListInsert(LinkList &L,int i,int &e){ if(i<1){ return false; } LNode *p;//指向當前表結點的指針 int j = 0;//當前p指向的是第幾個結點 p = L;//L指向頭結點,p也指向頭結點.頭結點不存任何數據 if(p!=NULL&&j<i-1){ p = p->next; j++; } if(p==NULL){//i值不合法(可能超出單鏈表的長度) return false; } if(p->next==NULL){//i-1結點後無結點 return false; } LNode *q = p->next;//q指向將要刪除的結點 e = q->data;//用e返回刪除的元素值 p->next = q->next;//把p與刪除後的下一個結點鏈接 free(q);//釋放q結點的內存空間 return true; }