【數據結構】-棧-單鏈表是否對稱

 需要分奇數偶數討論

前一半輸出放入棧中(用數組實現)

後一半繼續由指針遍歷

typedef struct Lnode {
	char data;
	struct Lnode* next;
}Lnode, *Linklist;

Linklist tail_insert(Linklist L) {//尾插法創建單鏈表
	L = (Linklist)malloc(sizeof(Linklist));
	L->next = NULL;
	Lnode *p;
	Lnode *r = L;
	char x;
	while (true) {
		cin >> x;
		if (x == 'q')break;
		p = (Lnode*)malloc(sizeof(Lnode));
		p->data = x;
		r->next = p;
		r = p;		
	}
	r->next = NULL;
	return L;
}

void print(Linklist L) {//打印鏈表
	Lnode *p = L->next;
	while (p) 
	{ 
		cout << p->data << " "; 
		p = p->next;
	}
}

void isduicheng(Linklist L, int n) {
	vector<char> s(n / 2);
	Lnode *p = L->next; 
	int i = 0, j = 0;
	for (i; i < n / 2; i++) {
		s[i] = p->data;
		p = p->next;
	}
	i--;
	if (n % 2 == 1) p = p->next;
	for (j = i; j > 0; j--) {
			if (p->data == s[j]) p = p->next;
			else
			{
				cout << "不對稱";
				break;
			}
	}
	if (j == 0)cout << "對稱";
}

int main() {
	int n;
	cout << "打算創建多少個節點?"<<endl;
	cin >> n;
	Linklist L=NULL;
	cout << "輸入字符串,q結束輸入" << endl;
	L=tail_insert(L);
	print(L);	
	isduicheng(L, n);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章