链表的回文判断

思路:

找中间节点-->逆置->比较

代码:

c 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode*slow=head;
struct ListNode*flast=head;
while(flast&&flast->next)
{
    slow=slow->next;
    flast=flast->next->next;
}
return slow;
}
struct ListNode* reverseList(struct ListNode* head){
    struct ListNode*newhead=NULL;
    struct ListNode*cur=head;
    while(cur)
    {
        struct ListNode*per=cur->next;
        cur->next=newhead;
        newhead=cur;
        cur=per;
    }
    return newhead;
}
bool isPalindrome(struct ListNode* head){
struct ListNode* mid=middleNode(head);//找中间节点
        struct ListNode* rmid=reverseList(mid);//逆置
        //比较
        while(head&&rmid)
        {
            if(head->val==rmid->val)
            {
                head=head->next;
                rmid=rmid->next;
            }else {
            return false;
            }
        }
        return true;
}
相关推荐
程序员东岸22 分钟前
数据结构精讲:从栈的定义到链式实现,再到LeetCode实战
c语言·数据结构·leetcode
laocooon5238578861 小时前
大数的阶乘 C语言
java·数据结构·算法
WBluuue10 小时前
数据结构与算法:树上倍增与LCA
数据结构·c++·算法
lkbhua莱克瓦2411 小时前
Java基础——集合进阶用到的数据结构知识点1
java·数据结构·笔记·github
杨福瑞11 小时前
数据结构:单链表(2)
c语言·开发语言·数据结构
王璐WL12 小时前
【数据结构】单链表及单链表的实现
数据结构
z1874610300312 小时前
list(带头双向循环链表)
数据结构·c++·链表
T.Ree.13 小时前
cpp_list
开发语言·数据结构·c++·list
童话ing14 小时前
【Golang】常见数据结构原理剖析
数据结构·golang
是苏浙14 小时前
零基础入门C语言之C语言实现数据结构之顺序表应用
c语言·数据结构·算法