1. 程式人生 > >循環雙鏈表 | 判斷鏈表元素是否對稱

循環雙鏈表 | 判斷鏈表元素是否對稱

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>

using
namespace 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"); }
View Code

循環雙鏈表 | 判斷鏈表元素是否對稱