struct ListNode{
int val;
struct ListNode *next;
};
//判断是否回文链表
bool isPalindrome(struct ListNode* head){
int data[5001];
int num=0;
while(head!=NULL){
data[num]=head->val;
num++;
head=head->next;
}
int i=0,j=num-1;
while(data[i]==data[j]){
if(i==j) return true;
i++;
j--;
if(i>j) return true;
}
return false;
}
//生成空表
struct ListNode * SetNullList_Link(){
struct ListNode * head = (struct ListNode * )malloc(sizeof(struct ListNode));
if(head!=NULL){
head->next = NULL;
}
else {
printf("malloc failure!\n");
}
return head;
}
//头插法创建链表
void CreateList_Head(struct ListNode * head){
struct ListNode *p = NULL;
int data;
scanf("%d",&data);
while(data!=-1){
p=(struct ListNode *) malloc(sizeof(struct ListNode));
p->val=data;
p->next=head->next;
head->next=p;
scanf("%d",&data);
}
}
int main() {
struct ListNode *head = SetNullList_Link();
CreateList_Head(head);
struct ListNode *p = head;
//打印链表
while(p->next != NULL){
p=p->next;
printf("%d ", p->val);
}
if(isPalindrome(head->next)) printf("True\n");
else printf("False\n");
return 0;
}
链表/回文链表
最新推荐文章于 2025-01-10 14:51:19 发布