首页 > 代码库 > careercup-链表 2.7
careercup-链表 2.7
2.7 编写一个函数,检查链表是否为回文。
思路:1)可以利用链表中的元素采用头插法创建一个新的链表,然后比较两个链表的元素是否相等。
2)利用快慢指针,将链表后半部分逆转之后,比较前半部分与后半部分是否相等。
3)利用栈将链表中的元素保存,然后弹出与链表中元素比较。
C++实现代码:
#include<iostream>#include<new>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL) {}};void createList(ListNode *&L){ int arr[10]= {1,2,3,4,5,5,4,3,2,1}; int i; ListNode *p=NULL; for(i=0; i<10; i++) { ListNode *tmp=new ListNode(arr[i]); if(L==NULL) { L=tmp; p=tmp; } else { p->next=tmp; p=tmp; } }}bool isPalindrome(ListNode *L){ if(L==NULL) return true; ListNode *L2=NULL; ListNode *p=L; ListNode *q=NULL; ListNode *tmp=NULL; while(p) { tmp=new ListNode(p->val); if(L2==NULL) { L2=tmp; } else { tmp->next=L2; L2=tmp; } p=p->next; } p=L; q=L2; while(p&&q) { if(p->val!=q->val) return false; p=p->next; q=q->next; } if(p==NULL&&q==NULL) return true; else return false;}int main(){ ListNode *head=NULL; createList(head); ListNode *p=head; while(p) { cout<<p->val<<" "; p=p->next; } cout<<endl; cout<<isPalindrome(head)<<endl;}
careercup-链表 2.7
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。