美文网首页
重排链表

重排链表

作者: 小码弟 | 来源:发表于2018-11-05 15:10 被阅读0次

形如L1->L2->...->Ln的链表,编写函数将链表重新排列成L1->Ln->L2->Ln-1->...,要求就地修改,不能修改数据域

思路:
第一步:定位到中间节点
第二步:从中间节点断开,逆置后半段链表
第三步:依次合并两段链表

LinkNode* FindMiddleNode(LinkNode* head)
{
  LinkNode* slow = head;
  LinkNode* fast = head->next;
  LinkNode* pre_slow = head;
  while(fast&&fast->next)
  {
    fast = fast->next->next;
    pre_slow = slow;
    slow = slow->next;
  }
  pre_slow = NULL;
  return slow;
}

void ReverseList(LinkNode* head)
 {
    LinkNode* pre = head;
    LinkNode* cur = head->next;
    LinkNode* next = head->next;
    pre->next = NULLl;
    while(cur)
    {
      next = cur->next;
      cur->next = pre;
      pre = cur;
      next = cur;
    }
    return pre;
  }
void ReorderList(LinkNode* head)
 {
    if(head == NULL || head->next == NULL)
      return;
    LinkNode* p1 = head->next;
    LinkNode* mid = FindMiddleNode(head);
    LinkNode* p2 = ReverseList(mid);
    LinkNode* tmp = NULL;
    while(p1->next)
     {
        tmp = p1->next;
        p1->next = p2;
        p1 = tmp;

        tmp = p2->next;
        p2->next = p1;
        p2 = tmp;
     }
    p1->next = p2;
  }

相关文章

  • 143. 重排链表

    143. 重排链表

  • 重排链表

    形如L1->L2->...->Ln的链表,编写函数将链表重新排列成L1->Ln->L2->Ln-1->...,要求...

  • All for PAT秋考 | 1132 - 1135

    涉及知识1132 sscanf(),浮点错误1133 链表重排(cmp函数、假装重排= =)1134 图的点覆盖(...

  • Redis数据结构学习-链表(二)

    链表 链表提供了高效的节点重排能力, 及顺序性节点访问方式, Redis构建了自己的链表实现 链表和链表节点的实现...

  • leetcode链表之重排链表

    143、重排链表[https://leetcode-cn.com/problems/reorder-list/] ...

  • LintCode 重排链表

    题目 给定一个单链表L: L0→L1→…→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-...

  • 链表重排序

    题目要求:对于链表如L1->L2->L3->L4->L5->L6->L7重新排列为L1->L7->L2->L6->...

  • 链表-中等:重排链表 By Swift

    题目 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2...

  • redis链表结构

    链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵魂的调整链表长度。 链表和链表节点...

  • LeetCode-143-重排链表

    重排链表 题目描述:给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln...

网友评论

      本文标题:重排链表

      本文链接:https://www.haomeiwen.com/subject/jherxqtx.html