【问题标题】:Palindrom check of linkedlist回文检查是否为链表
【发布时间】:2017-12-11 15:33:40
【问题描述】:

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

#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。请帮忙。谢谢

【问题讨论】:

  • 你需要写 node = insert(value,node);主要
  • @VladfromMoscow :你是一个救世主......这是我的一个微不足道的错误。我的错。谢谢
  • 您应该修复代码的损坏缩进。

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


【解决方案1】:

你需要写

node = insert(value,node);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2020-04-24
    • 2012-09-02
    相关资源
    最近更新 更多