2023每日刷题(二十七)
Leetcode—234.回文链表
直接法实现代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
bool isPalindrome(struct ListNode* head) {if(head == NULL) {return true;}if(head->next == NULL) {return true;}if(head->next->next == NULL) {return head->next->val == head->val;}int len = 0;struct ListNode* p = head;while(p != NULL) {len++;p = p->next;}int *arr = (int *)malloc(sizeof(int) * len);p = head;int i = 0;while(p != NULL) {arr[i++] = p->val;p = p->next;}for(i = 0; i < len / 2; i++) {if(arr[i] != arr[len - 1 - i]) {return false;}}return true;
}
运行结果
快慢指针+链表原地逆置实现代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/// 找到中间节点
struct ListNode* midNode(struct ListNode* head) {struct ListNode* fast, *slow;fast = head;slow = head;while(fast->next != NULL && fast->next->next != NULL) {slow = slow->next;fast = fast->next->next;}return slow;
}// 翻转链表
struct ListNode* reverseList(struct ListNode* head) {struct ListNode* p = head, *q = head;struct ListNode* h = (struct ListNode*)malloc(sizeof(struct ListNode));h->next = NULL;while(p != NULL) {q = p->next;p->next = h->next;h->next = p;p = q;}return h->next;
}bool isPalindrome(struct ListNode* head) {if(head == NULL) {return true;}if(head->next == NULL) {return true;}if(head->next->next == NULL) {return head->next->val == head->val;}struct ListNode* mid = midNode(head);struct ListNode* head2 = mid->next;head2 = reverseList(head2);while(head2 != NULL) {if(head->val != head2->val) {return false;}head = head->next;head2 = head2->next;}return true;
}
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!