標籤:鏈表 c++ 雙鏈表
<span style="font-size:18px;"><strong>//代碼為自己編寫,可能有問題,歡迎大家留言指正!</strong></span>
<span style="font-size:18px;"><strong></strong></span>
#include <iostream>#include <string>using namespace std;typedef struct dnode{int val;dnode *prior;dnode *next;}dnode;dnode * create();void traverse(dnode *pHead);bool insert(dnode *pHead,int pos,int val);bool del(dnode *pHead,int pos,int &val);void inverse(dnode *pHead);void main(){dnode *pHead = create();traverse(pHead);insert(pHead,3,5);traverse(pHead);int val;del(pHead,4,val);cout<<val<<endl;traverse(pHead);inverse(pHead);//traverse(pHead);}//建立迴圈雙鏈表dnode *create(){dnode *pHead = new dnode,*pTail;pTail = pHead;pTail->next = pHead;//pHead->prior = pTail;for (int i =0;i<4;i++){dnode *pNew = new dnode;pNew->val = i+1;pNew->next = pTail->next;pTail->next = pNew;pNew->prior = pTail;pTail = pNew;}pHead->prior = pTail;return pHead;}void traverse(dnode *pHead){dnode *p =pHead->next;while (p != pHead){cout<<p->val<<" ";p = p->next; }cout<<endl;}bool insert(dnode *pHead,int pos,int val){dnode *p = pHead,*q;int i = 1;while (p->next != pHead && i < pos) //找到pos-1個節點(不包括頭結點){++i;p = p->next;}if (i > pos || p->next == pHead){return false;}dnode *pNew = new dnode;q = p->next; pNew->val = val;p->next = pNew;pNew->prior = p;pNew->next = q;q->prior = pNew;return true;}bool del(dnode *pHead,int pos,int &val){dnode *p = pHead,*q;int i = 1;while (p->next != pHead && i < pos) //找到pos-1個節點(不包括頭結點){++i;p = p->next;}if (i > pos || p->next == pHead){return false;} q = p->next; //q為要刪除的節點 val = q->val; p->next = q->next; q->next->prior = p; delete q;return true;}//逆序輸出void inverse(dnode *pHead){dnode *p = pHead->prior; //p指向最後一個節點while (p != pHead){cout<<p->val<<" ";p = p->prior;}cout<<endl;}