Ⅰ 判斷一個鏈表是不是迴文數,要求O(n)時間
1. 使用2個指針,快慢指針各一個,每次快指針移動一個,慢指針移動2個。 2. 當快指針不為NULL時候,將慢指針push到棧中。 3. 當快指針等於NULL時候,說明鏈表前半部分已經被壓入棧中。 4. 每次棧Top元素與當前慢指針元素比較,如果不相等則返回false。如果相等,則棧Pop,慢指針++。 5. 鏈表奇數或者偶數節點需要判斷。 #include <iostream #include <stack struct node{int data;node* next; node(int eData, node* eNext){data = eData; next = eNext;}}; bool isPanli(node* head){std::stack<node* stk; node* slow = head; node* fast = head; bool flag = false; while (fast){stk.push(slow); slow = slow-next; fast = fast-next;if (fast){fast = fast-next;}elseflag = true;}if (flag)stk.pop(); while (!stk.empty()){if (stk.top()-data == slow-data){stk.pop();slow = slow-next;}elsereturn false;} return true;};int main(){node* n5 = new node(1, NULL); node* n4 = new node(2, n5); node* n3 = new node(3, n4); //node* n2 = new node(3, n3);node* n1 = new node(2, n3);
Ⅱ C語言指針,判斷是否是迴文
參數應為char *p.
另外, strlen參數應為p而不是*p .
最後 雖然你這個修改後可以實現判斷, 但嚴格來說內不算是利用指針實容現.
修改如下
#include<stdio.h>
intmain(void)
//判斷字元串是否是迴文
{
inti=0,flag;
charstr[80];
intyes(char*p);//
printf("請輸入字元串:");
while((str[i]=getchar())!=' ')i++;
str[i]='