给定一个单链表 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