基础数据结构练习(栈)

  • 算法题目

回文链表

回文链表

  • 题目简介

题目:回文链表

  • 涉及知识点

链表结点、栈性质、(回文数组首尾性质)

  • 算法分析
  1. 创建一个栈,从头接收链表的元素
  2. 栈顶元素和链表头结点进行比较(同时出栈,链表向后访问)
  3. 对比中一旦发现不等返回false
  • 源码讲解

方法一

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

//单纯用栈,然后用栈顶和链表元素做对比
bool isPalindrome(struct ListNode* head) {
   
    int* stack = (int*)malloc(sizeof(int) * 100000);//为栈开辟空间
    int top = 0;
    //将head链表中的元素从头到尾依次赋值给tmp
    struct ListNode* tmp = head;
    while(tmp)
    {
   
        stack[top++] = tmp->val;
        tmp = tmp->next;
    }
    //一个从栈顶出发,一个从链表头指针出发
    while(top--)
    {
   
        if(stack[top] != head->val)
        {
   
            return false;
        }
        head = head->next;
    }
    
    free(stack);//释放内存
    return true;
}

方法二

也可以选择用 判断数组首尾是否相等

这里我们拿stack来当做数组,判断首尾。时间复杂度会小一些

bool isPalindrome(struct ListNode* head) {
   
    int* stack = (int*)malloc(sizeof(int) * 100000);
    int top = 0;
    //这里可以不用创建tmp
    while(head)
    {
   
        stack[top++] = head->val;
        head = head->next;
    }

    //数组首尾判断法
    int low = 0;
    int high = top - 1;//尾

    while(low < high)
    {
   
        if(stack[low] != stack[high])
            return false;
        high--;
        low++;
    }
    
    free(stack);
    return true;
}
  • FAQ
  1. 方法一,while中的top是每调用一次top就–,而不是等到循环结束了top才-- (top也表示栈长类似数组长,while循环第一次进行时,top就变成 栈长-1,在循环中,即栈长-1参与运算,没有越界现象)
  2. 方法一,创建临时变量tmp,是因为两个循环都要从链表头指针出发(头指针向后容易,向前难)

相关推荐

  1. 【算法集训】基础数据结构:四、

    2024-01-13 01:54:01       68 阅读
  2. 基础数据结构和队列

    2024-01-13 01:54:01       54 阅读
  3. C语言实现基础数据结构——

    2024-01-13 01:54:01       53 阅读
  4. 深入理解基本数据结构详解

    2024-01-13 01:54:01       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 01:54:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 01:54:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 01:54:01       87 阅读
  4. Python语言-面向对象

    2024-01-13 01:54:01       96 阅读

热门阅读

  1. vue3中el-table实现表格合计行

    2024-01-13 01:54:01       66 阅读
  2. [ECE]1.3 Basic logic operations

    2024-01-13 01:54:01       48 阅读
  3. 3 微信小程序

    2024-01-13 01:54:01       51 阅读
  4. 面试题-回溯算法解法模板

    2024-01-13 01:54:01       55 阅读
  5. 数据库面经---10则

    2024-01-13 01:54:01       61 阅读
  6. Android实现通过字符串找到图片、Class

    2024-01-13 01:54:01       49 阅读
  7. [ECE] Introduction to Digital Logic and Systems

    2024-01-13 01:54:01       52 阅读
  8. 【PHP】判断字符串是否是有效的base64编码

    2024-01-13 01:54:01       56 阅读
  9. golang中context详解

    2024-01-13 01:54:01       57 阅读