Palindrom检查链表

时间:2017-07-07 10:53:46

标签: c algorithm linked-list singly-linked-list palindrome

这是我编写的代码,用于检查单个链接的整数列表是否为回文。

#include<stdio.h>
#include<stdlib.h>
struct list
{
int data;
struct list *next;
};
struct list *insert(int data,struct list *node)
{
 if(node==NULL)
 {
    node=(struct list *)malloc(sizeof(struct list));
    node->data=data;
    node->next=NULL;
}
else
{
    struct list *newnode=(struct list *)malloc(sizeof(struct list));
    newnode->data=data;
    newnode->next=node;
    node=newnode;
}
return node;
 }

int palindrome(struct list *node,int n)
{
int i=0;int j=0;
   int arr1[n],arr2[n];
   struct list *current;
   current=node;
 while(current!=NULL)
 {
    arr1[i]=current->data;
    i++;
    current=current->next;
}
i=0;j=0;
  for(i=n-1;i>=0;i--)
  {
    arr2[j]=arr1[i];
    j++;
}
for(i=0;i<n;i++)
{
    if(arr1[i]!=arr2[i])
    {
        return 0;
    }
}
return 1;
}
 void main()
{
 int n;
 scanf("%d",&n);
 struct list *node=NULL;
 int i=1;int value;
 for(i=1;i<=n;i++)
 {
    scanf("%d",&value);
     insert(value,node);
 }
 int status=palindrome(node,n);
 printf("%d",status);
 }

但即使在有效的回文输入(如“121”)和非回文输入(如“154”)的情况下,代码也会返回0。请帮忙。感谢

1 个答案:

答案 0 :(得分:2)

你需要写

node = insert(value,node);

主要。否则,头节点不会更改,因为函数insert处理节点的副本。