精华内容
下载资源
问答
  • 用指针访问字符串,判断是否为回文。输入一个字符串,若是回文,则输出Yes,否则输出No。 哪里有问题。 <code class="language-cpp">#include <stdio.h> #include <string.h>...
  • 以前有过判断回文串,但是对于回文链表,由于链表具有不可回溯性,所以可能需要借用一定空间。 题目描述 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 ...

    序言

    以前有过判断回文串,但是对于回文链表,由于链表具有不可回溯性,所以可能需要借用一定空间。

    题目描述

    请判断一个链表是否为回文链表。

    示例 1:

    输入: 1->2
    输出: false

    示例 2:

    输入: 1->2->2->1
    输出: true

    进阶:
    你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

    结题思路

    1.找到链表的中点。
    法一:
    遍历链表,并将num/2;
    法二:
    用快慢指正依次遍历,当快指针走到头时,慢指针刚好在中点位置;

    2.将链表的前半部分入栈

    3.依次出栈并与链表的后半部分比较。

    代码

    typedef struct{
        int data[100000];
        int top;
    }creatStack;
    
    bool isPalindrome(struct ListNode* head){
        creatStack stack;
        struct ListNode *p=head;
        int num=0,flag=0;
        stack.top=-1;
        while(p!=NULL){
            num++;
            p=p->next;
        }//计算链表元素数量
        if(num&1)
            flag=1;
        num=(num+1)/2;
        p=head;
        for(int i=0;i<num;i++){
            stack.data[++(stack.top)]=p->val;
            p=p->next;
        }
        if(flag)
            stack.top--;
        while(p!=NULL){
            if(p->val!=stack.data[stack.top])
                return false;
            stack.top--;
            p=p->next;
        }
        return true;
    }
    
    展开全文
  • 输入一段信息,忽略所有不是字母的字符,然后判断这条消息是否回文。 a.整型变量跟踪数组内的位置#include #include #include #define N 10main() { char a[N],b[]={'0'}; int len_a=0,len_b=0,flag=

    题目来自《C语言程序设计—现代方法》12章第5题:
    输入一段信息,忽略所有不是字母的字符,然后判断这条消息是否回文。
    a.用整型变量跟踪数组内的位置

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #define N 50
    
    main()
    {
    
      char a[N],b[]={'0'};
      int len_a=0,len_b=0,flag=0;
      int i=0,j=0;
    
      for(i=0;i<N;i++)
      {
        scanf("%c",&a[i]);
        len_a++;
        if(a[i]=='\n')
          break;
    
      }
    
      for(i=0,j=0;i<len_a;i++)
      {
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
        { 
          b[j]=tolower(a[i]);
          j++;
          len_b++;
        }
      }
    
      for(j=0;j<len_b;j++)
        printf("%c",b[j]);
    
      printf("\n");
    
      for(i=0,j=len_b-1;i<j;)
        {
          if(b[i]!=b[j])
          {
            printf("not");
    
            flag++;
            break;
          }
          i++;
          j--;
        }
    
      if(flag==0)
        printf("yes");
    
      return 0;
    }
    

    b.用指针代替整数跟踪数组的位置

    #include<stdio.h>
    #include<ctype.h>
    #define N 50
    
    main()
    {
    
      char a[N],b[]={'0'};
      int len_a=0,len_b=0,flag=0;
      char *p,*q,*r;
      p=a;
      q=b;
    
      for(p=a;p<a+N;p++)
      {
        scanf("%c",p);
        len_a++;
        if(*p=='\n')
          break;   
      }
    
      for(p=a;p<a+len_a;p++)
      {
        if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z'))
        { 
          *q=tolower(*p);
          q++;
          len_b++;
        }
      }
    
      for(q=b;q<b+len_b;q++)
        printf("%c",*q);
      printf("\n");
    
      r=b+len_b-1;
      q=b;//重新指向b[0] 
      for(;q<r;)
        {
          if(*q!=*r)
          {
            printf("not\n");
    
            flag++;
            break;
          }
          q++;
          r--;
        }
      if(flag==0)
        printf("yes\n");
    
      return 0;
    }
    
    展开全文
  • //函数fun功能:函数指针指向要调用的函数,并进行调用。 1 #include <stdio.h> 2 double f1(double x) 3 { return x*x; } 4 double f2(double x, double y) 5 { return x*y; } 6 double fun...

    //函数fun功能:用函数指针指向要调用的函数,并进行调用。

     1 #include  <stdio.h>
     2 double f1(double  x)
     3 {  return  x*x;  }
     4 double f2(double x, double y)
     5 {  return  x*y;  }
     6 double fun(double  a, double  b)
     7 {
     8 /**********found**********/
     9   double (*f)();//定义一个指针函数。
    10   double  r1, r2;
    11 /**********found**********/
    12   f = f1; 
    13   r1 = f(a);
    14 /**********found**********/
    15   f = f2;
    16   r2 = (*f)(a, b);
    17   return  r1 + r2;
    18 }
    19 void main()
    20 { double  x1=5, x2=3, r;
    21   r = fun(x1, x2);
    22   printf("\nx1=%f,  x2=%f,  x1*x1+x1*x2=%f\n",x1, x2, r);
    23 }

    //建立一个带头节点的单向链表,并用随机函数为各个结点赋值,函数fun将单向链表结点数据域为偶数的值累加起来。

     1 #include <stdio.h>
     2 #include <conio.h>
     3 #include <stdlib.h>
     4 typedef struct aa
     5 { int data;
     6   struct aa *next;
     7 } NODE;
     8 int fun (NODE *h)
     9 { int sum=0;
    10   NODE *p;
    11   p=h->next;//首结点
    12 /*************found**************/
    13   while(p!=NULL)//注意
    14        { if(p->data%2==0)
    15              sum+=p->data;
    16 /*************found**************/
    17           p=p->next;
    18        }
    19   return sum;
    20 }
    21 NODE *creatlink(int n)
    22 { 
    23   NODE *h,*p,*s;
    24   int i;
    25   h=p=(NODE*)malloc(sizeof(NODE));
    26   for(i=1;i<n;i++)
    27   {
    28     s=(NODE*)malloc(sizeof(NODE));
    29     s->data=rand()%16;
    30     s->next=p->next;
    31     p->next=s;
    32     p=p->next;
    33   }
    34   p->next=NULL;
    35   return h;
    36 }
    37 void outlink(NODE *h)
    38 { NODE  *p;
    39   p=h->next;
    40   printf("\n\n The LIST :\n\n HEAD");
    41   while(p)
    42     { printf("->%d",p->data); 
    43       p=p->next;}
    44   printf("\n");
    45 }
    46 void main()
    47 { NODE *head; int sum;
    48   system("CLS");
    49   head=creatlink(10);
    50   outlink(head);
    51   sum=fun(head);
    52   printf("\nSUM=%d",sum); 
    53 }

    //函数功能:判断字符串是否为回文,若是返回1,主函数输出YES。回文是指顺读和倒读都一样的字符串。

     1 #include <stdio.h>
     2 #define N 80
     3 int fun(char *str)
     4 {
     5     char *p = str;
     6     char *q = str + strlen(str) - 1;
     7     while (*p == *q)
     8     {
     9         p++; q--;
    10         if (p >= q)
    11         {
    12             return 1;
    13         }
    14     }
    15     return 0;
    16 }
    17 
    18 void main()
    19 {
    20      char s[N];
    21      FILE *out;
    22          char *test[]={"1234321","123421","123321","abcdCBA"};
    23      int i;
    24      printf("Enter a string : ");
    25      gets(s);
    26      printf("\n\n");
    27      puts(s);
    28      if(fun(s))
    29         printf("YES\n");
    30      else
    31         printf("NO\n"); 
    32      /************************************/
    33      out=fopen("out.dat","w");
    34      for(i=0;i<4;i++)
    35          if(fun(test[i]))
    36             fprintf(out,"YES\n");
    37         else
    38             fprintf(out,"NO\n");
    39      fclose(out);
    40      /************************************/
    41 }

     

    转载于:https://www.cnblogs.com/ming-4/p/10443607.html

    展开全文
  • 回文链表(C语言)

    2019-04-26 11:11:32
    判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 思路 1.首先使用快慢双指针找到...

    1.题目

    请判断一个链表是否为回文链表。

    示例 1:

    输入: 1->2
    输出: false
    示例 2:

    输入: 1->2->2->1
    输出: true
    进阶:
    你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

    思路

    1.首先使用快慢双指针找到链表中点。
    2.将链表后半段进行反转
    将反转后的后半段与链表前半段比较。

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    bool isPalindrome(struct ListNode* head) {
        if(head==NULL) return true;
        struct ListNode *fast,*slow,*p,*q,*temp=NULL;
        fast=slow=head;
        while(fast->next && fast->next->next){
            fast=fast->next->next;
            slow=slow->next;
        }
        slow=slow->next;
        while(slow!=NULL){
            p=slow;
            slow=slow->next;
            p->next=temp;
            temp=p;
        }
        while(temp!=NULL){
            if(temp->val!=head->val){
                return false;
            }
            temp=temp->next;
            head=head->next;
        }
        return true;
        
    }
    
    展开全文
  • 题目非常简单,无非就是判断一个没用头结点的指针,是否为回文链表,但是简单的题目往往值得更深的思考。该题目有很多的解法,想要在时间击败百分百的话,不仅仅是代码本身,可能跟电脑还有一定的关系。 全遍历,入...
  • C语言博客作业05-指针

    2018-12-16 22:09:00
    1.本章学习总结  1.1思维导图  1.2本章学习体会及代码量  1.2.1学习体会  1.2.2代码量 2.PTA总分  2.1截图PTA中函数题目集的排名得分...立count 头和尾用指针循环判断 如果头指针 的值等于尾指针的值则 count...
  • 判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解决思路:先利用快慢...
  • C语言实现判断字符是否为回文数 算法分析:回文其实就是字符串中的字符对称相等,所以就要判断对称的字符是否都相等,需要循环来控制。可设一字符数组arr,长度为32,用来存放此字符串,再设指针变量i指向字符串首...
  • 判断回文数 C语言

    2020-12-16 17:18:26
    判断回文数 问题描述 用指针作为函数参数,编写函数fun,该函数的功能是判断字符串是否为回文,若是则函数返回1,主函数中输出“YES”,否则返回0,主函数中输出“NO”。例如,字符串LEVEL是回文,而字符串123312就不是...
  • 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 示例1 1->2->2...
  • 220个经典C语言源码

    千次下载 热门讨论 2013-08-16 23:35:01
    031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 “结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 ...
  • c语言经典案例

    2014-10-30 08:06:57
    实例175 用指针数组构造字符串数组 248 实例176 用指针函数输出学生成绩 249 实例177 寻找相同元素的指针 251 实例178 查找成绩不及格的学生 252 实例179 使用指针实现冒泡排序 254 实例180 输入月份号并输出英文...
  • 一、思路及方法 11-8 螺旋方阵 设计二维数组,通过对方阵的行和列进行特征分析找出其中规律,利用循环即可将方阵输出。...13-5 判断回文字符串 设计字符型数组,并利用指针来传递输入内容;通过函数来判断是否为...
  • 220个C语言经典代码

    2016-07-06 16:10:20
    031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 “结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 ...
  • CSU 大一上 C语言实验报告 (1)教材第2章编程题第2题:编写计算球体体积的程序。...(25)教材第17章编程题第5题:用指针数组存储键入的字符串,对数组排序。 说明:本题应用动态分配内存、数组排序,考查综合能力。
  • C语言学习实例220例

    2015-06-16 23:47:59
    019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 ...
  • C语言常用算法

    2012-03-28 10:48:37
    031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 “结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 ...
  • C语言实例解析精粹 PDF

    热门讨论 2010-08-17 00:20:25
    实例19 判断回文数 实例20 求数组前n个元素之和 实例21 求解钢材切割的最佳订单 实例22 通过指针比较整数大小 实例23 指向数组的指针 实例24 寻找指定元素的指针 实例25 寻找相同元素的指针 实例26 阿拉伯数字转换为...
  • 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 ...
  • 84 _ 如何看懂一个程序举例_1 _ while判断是否是回文数【重点】 83 _ while循环3 _ for和while的比较 82 _ while循环2 _ while执行顺序 81 _ while循环1 _ while概述 80 _ for循环9 _ 多个for循环嵌套使用举例 79 ...
  • C语言实例解析精粹

    2014-03-14 21:57:05
    031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 “结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 ...
  • 实例27 字符替换 实例28 从键盘读入实数 实例29 字符行排版 实例30 字符排列 实例31 判断字符串是否回文 实例32 通讯录的输入输出 实例33 扑克牌的结构表示 实例34 “结构”统计学生成绩 实例35 ...
  • 5.6 判断回文数字 5.7 填数字游戏求解 5.8 新郎和新娘 5.9 爱因斯坦的阶梯问题 5.10 寻找水仙花数 5.11 猴子吃桃问题 5.12 兔子产仔问题 5.13 分解质因数 5.14 常胜将军 5.15 求兀的近似值 5.16 魔幻方阵 5.17 移...
  • 函数习题:函数实现判断一个整数是否能被n整除 68%(469/690) 34% 2020-4-23 1087 1091 结构体习题:通过学生学号查询学生 结构体习题:通过职工信息输出高于平均工资的职工信息及高于平均工资的职工人数
  • 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 “结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 ...
  • 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 “结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 ...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

c语言用指针判断回文

c语言 订阅