雙向鏈表元素的刪除

來源:互聯網
上載者:User

struct Node<br />{<br /> int Data;<br /> struct Node* prior;<br /> struct Node* next;<br />}; </p><p>/**<br />* @brief 該函數實現了刪除帶頭結點雙鏈表中第i個結點<br />* @param[in] head 待刪除結點鏈表<br />* @param[in] i 待刪除結點位置<br />* @param[out] e 刪除結點內容<br />* @notice 帶頭結點的雙鏈表中第一個元素為頭結點後的元素,所以不存在刪除頭結點的情況 </p><p>* @author wlq_729@163.com<br />* http://blog.csdn.net/rabbit729<br />* @version 1.0<br />* @date 2009-03-09<br />*/<br />int DelDoubleList(Node* head, const int i, int& e)<br />{<br /> assert(head); </p><p> if (head->next == NULL)<br /> {<br /> return -1;<br /> }<br /> Node* p = head;<br /> int j = 0; </p><p> // 尋找待刪除結點<br /> while ((p->next != NULL) && (j < i))<br /> {<br /> p = p->next;<br /> j++;<br /> } </p><p> // 處理刪除最後一個結點的情況<br /> if (p->next == NULL)<br /> {<br /> e = p->Data;<br /> p->prior->next = NULL;<br /> delete p;<br /> p = NULL;<br /> return 0;<br /> }<br /> else<br /> {<br /> e = p->Data; </p><p> p->next->prior = p->prior;<br /> p->prior->next = p->next;<br /> delete p;<br /> p = NULL;<br /> return 0;<br /> }<br />} </p><p>/**<br />* @brief 該函數實現了刪除帶頭結點雙鏈表中與給定值相等的第一個結點<br />* @param[in] head 待刪除結點鏈表<br />* @param[in] data 待刪除結點元素值 </p><p>* @author wlq_729@163.com<br />* http://blog.csdn.net/rabbit729<br />* @version 1.0<br />* @date 2009-03-09<br />*/<br />int DelDoubleList(Node* head, int data)<br />{<br /> assert(head);<br /> if (head->next == NULL)<br /> {<br /> return -1;<br /> } </p><p> Node* prior = head;<br /> Node* q = head->next; </p><p> // 尋找待刪除結點<br /> while((q != NULL) && (q->Data != data))<br /> {<br /> q = q->next;<br /> } </p><p> // 刪除元素<br /> if ((q != NULL) && (q->Data == data))<br /> {<br /> // 處理刪除最後一個結點的情況<br /> if (q->next == NULL)<br /> {<br /> q->prior->next = NULL;<br /> delete q;<br /> q = NULL;<br /> return 0;<br /> }<br /> else<br /> {<br /> q->next->prior = q->prior;<br /> q->prior->next = q->next;<br /> delete q;<br /> q = NULL;<br /> return 0;<br /> }<br /> }<br /> else<br /> {<br /> cout<<"Could not find data!"<<endl;<br /> return -1;<br /> }<br />}<br />struct Node<br />{<br /> int Data;<br /> struct Node* prior;<br /> struct Node* next;<br />};</p><p>/**<br />* @brief 該函數實現了刪除帶頭結點雙鏈表中第i個結點<br />* @param[in] head 待刪除結點鏈表<br />* @param[in] i 待刪除結點位置<br />* @param[out] e 刪除結點內容<br />* @notice 帶頭結點的雙鏈表中第一個元素為頭結點後的元素,所以不存在刪除頭結點的情況</p><p>* @author wlq_729@163.com<br />* http://blog.csdn.net/rabbit729<br />* @version 1.0<br />* @date 2009-03-09<br />*/<br />int DelDoubleList(Node* head, const int i, int& e)<br />{<br /> assert(head);</p><p> if (head->next == NULL)<br /> {<br /> return -1;<br /> }<br /> Node* p = head;<br /> int j = 0;</p><p> // 尋找待刪除結點<br /> while ((p->next != NULL) && (j < i))<br /> {<br /> p = p->next;<br /> j++;<br /> }</p><p> // 處理刪除最後一個結點的情況<br /> if (p->next == NULL)<br /> {<br /> e = p->Data;<br /> p->prior->next = NULL;<br /> delete p;<br /> p = NULL;<br /> return 0;<br /> }<br /> else<br /> {<br /> e = p->Data;</p><p> p->next->prior = p->prior;<br /> p->prior->next = p->next;<br /> delete p;<br /> p = NULL;<br /> return 0;<br /> }<br />}</p><p>/**<br />* @brief 該函數實現了刪除帶頭結點雙鏈表中與給定值相等的第一個結點<br />* @param[in] head 待刪除結點鏈表<br />* @param[in] data 待刪除結點元素值</p><p>* @author wlq_729@163.com<br />* http://blog.csdn.net/rabbit729<br />* @version 1.0<br />* @date 2009-03-09<br />*/<br />int DelDoubleList(Node* head, int data)<br />{<br /> assert(head);<br /> if (head->next == NULL)<br /> {<br /> return -1;<br /> }</p><p> Node* prior = head;<br /> Node* q = head->next;</p><p> // 尋找待刪除結點<br /> while((q != NULL) && (q->Data != data))<br /> {<br /> q = q->next;<br /> }</p><p> // 刪除元素<br /> if ((q != NULL) && (q->Data == data))<br /> {<br /> // 處理刪除最後一個結點的情況<br /> if (q->next == NULL)<br /> {<br /> q->prior->next = NULL;<br /> delete q;<br /> q = NULL;<br /> return 0;<br /> }<br /> else<br /> {<br /> q->next->prior = q->prior;<br /> q->prior->next = q->next;<br /> delete q;<br /> q = NULL;<br /> return 0;<br /> }<br /> }<br /> else<br /> {<br /> cout<<"Could not find data!"<<endl;<br /> return -1;<br /> }<br />} </p><p>

 

 

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/rabbit729/archive/2009/03/09/3974425.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.