單鏈表的刪除

單鏈表第i個(gè)數(shù)據(jù)刪除結(jié)點(diǎn)的算法思路

  1. 聲明一指針p指向鏈表頭指針,初始化j從1開(kāi)始;
  2. 當(dāng)j<i時(shí),就遍歷鏈表,讓p的指針向后移動(dòng),不斷指向下一個(gè)結(jié)點(diǎn),j累加1;
  3. 若鏈表末尾p為空,則說(shuō)明第i個(gè)元素不存在;
  4. 否則查找成功,將欲刪除的結(jié)點(diǎn)p->next 賦值給q;
  5. 單鏈表的刪除標(biāo)準(zhǔn)語(yǔ)句p->next=q->next;
  6. 將q結(jié)點(diǎn)中的數(shù)據(jù)賦值給e,作為返回;
  7. 釋放q結(jié)點(diǎn);
  8. 返回成功。

實(shí)現(xiàn)代碼算法如下:

/* 初始條件:順序線性表L已存在,1<=i<=ListLength(L) */
/* 操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素, */
Status ListDelete(LinkList *L, int i, ElemType *e) 
{
  int j;
  LinkList p,q;
  p = *L;
  j = 1;
  // 尋找遍歷第i個(gè)元素并將p的next指向p,直到找到i為止
  while (p->next && j < 1) {
   p = p->next;
   ++j;
  }
  // 如果第i個(gè)元素不存在,報(bào)錯(cuò)
  if (!(p->next) || j > i)
  {
    return ERROR;
  }

  q = p->next;
  // 將q的后繼賦值給p的后繼
  p->next = q->next;
  // 因?yàn)橐@取釋放結(jié)點(diǎn)的值,所以這里要把釋放結(jié)點(diǎn)的值賦值給*e
  *e = q->data;
  // 利用c語(yǔ)言的函數(shù)free 讓系統(tǒng)回收此結(jié)點(diǎn),釋放內(nèi)存
  free(q);
  return OK;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文來(lái)自本人著作《趣學(xué)數(shù)據(jù)結(jié)構(gòu)》 鏈表是線性表的鏈?zhǔn)酱鎯?chǔ)方式,邏輯上相鄰的數(shù)據(jù)在計(jì)算機(jī)內(nèi)的存儲(chǔ)位置不一定相鄰,那么...
    rainchxy閱讀 3,895評(píng)論 6 20
  • 1. 鏈表的定義 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素,這組存儲(chǔ)單元可以存在內(nèi)存中...
    Eric_Hunter閱讀 1,088評(píng)論 0 2
  • 轉(zhuǎn)自:http://blog.csdn.net/oreo_go/article/details/52116214 ...
    YYT1992閱讀 1,285評(píng)論 0 4
  • 一方面真切地感受到衰老,感受到時(shí)間流逝,有倒計(jì)時(shí)的恐懼和不甘。一方面繼續(xù)麻木的重復(fù)生活,沒(méi)有動(dòng)彈,默默看著時(shí)間流向...
    Collagen閱讀 171評(píng)論 0 0
  • 作者:王瑜 上海的天氣太熱,剛買(mǎi)回不久的大米還沒(méi)來(lái)得及吃上幾頓,米粒里面便生了幾個(gè)小蟲(chóng)子,原打算把整袋大米扔掉,卻...
    北筆閱讀 542評(píng)論 0 2

友情鏈接更多精彩內(nèi)容