给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
给定链表 1->2->3->4, 重新排列为 1->4->2->3.
示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
解法一:用栈和队列解决
将链表前一半结点放在队列中,后一半结点放在栈中,然后出队列和出栈交替进行。
struct ListNode
{
int val;
struct ListNode* next;
};
void reorderList(struct ListNode* head)
{
if (head == NULL || head->next == NULL) return ;
ListNode* p = head;
int count = 0;
while (p != NULL)
{
count++;
p = p->next;
}
int len = count /

本文探讨如何将单链表重新排列,例如1->2->3->4变为1->4->2->3或1->5->2->4->3。提出两种解法:一是结合栈和队列操作;二是通过找到链表中间节点,反转后半部分并合并。
最低0.47元/天 解锁文章
3783

被折叠的 条评论
为什么被折叠?



