循環雙鏈表 | 判斷鏈表元素是否對稱
阿新 • • 發佈:2018-02-17
names try name als include alt class pen turn
王道P39T17
主代碼:
bool symmetry(DLinkList& L){ DNode *p=L->next,*q=L->prior; while(p!=q && p->data==q->data){ p=p->next; q=q->prior; } if(p==q) return true; return false; }
完整代碼:
#include <cstdio> #include <stdlib.h> usingView Codenamespace std; typedef struct DNode{ int data; struct DNode* next=NULL; struct DNode* prior=NULL; DNode(int x=0){ data=x; } }DNode; typedef DNode* DLinkList; DLinkList build_list(int * arr,int n){ int i; DLinkList L=new DNode; DLinkList pre=L,p;for(i=0;i<n;i++){ p=new DNode(arr[i]); pre->next=p; p->prior=pre; pre=p; } L->prior=p; p->next=L; return L; } void show_list(DLinkList& L){ DLinkList p=L->next; while(p!=L){ printf("%d ",p->data); p=p->next; } puts(""); } void append(DLinkList& L,int d){ DNode* p=new DNode(d); DNode* end=L->prior; end->next=p; p->next=L; L->prior=p; } void insert(DLinkList& L,int i,int d){ DNode* p=L,*n=new DNode(d); for(int j=0;j<i && p->next!=L;j++) p=p->next; n->next=p->next; if(p->next) p->next->prior=n; n->prior=p; p->next=n; } bool symmetry(DLinkList& L){ DNode *p=L->next,*q=L->prior; while(p!=q && p->data==q->data){ p=p->next; q=q->prior; } if(p==q) return true; return false; } int main(){ const int n=6; int A_arr[n]={1,2,3,4,2,1}; DLinkList A=build_list(A_arr,n); puts(symmetry(A)?"Yes":"No"); }
循環雙鏈表 | 判斷鏈表元素是否對稱