题解 | #重排链表#

重排链表

http://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b

将len/2后的节点单独拿出来为l2链表,len/2前的链表为l1链表。然后合并两个链表即可。细节真多啊。。。

class Solution {
public:
  void reorderList(ListNode* head) {
    if (!head) return;
    int len = 0;
    ListNode* tmp_head = head;
    ListNode* tail = nullptr;
    ListNode* tmp = nullptr;
    ListNode* l1 = nullptr, * l2 = nullptr;
    while (head)
    {
      head = head->next;
      len++;
    }
    if (len <= 2) return;
    head = tmp_head;
    int i = 1;
    while (i < len / 2)
    {
      head = head->next;
      i++;
    }
    if (len % 2 == 1)
    {
      head = head->next;
      tail = head;
      tmp = head->next;
      head->next = nullptr;

    }
    else
    {
      tail = head;
      tmp = head->next;
      head->next = nullptr;
    }
    l2 = backList(tmp);
    l1 = tmp_head;
    i = 0;
    while (i < len / 2)
    {
      auto l1_next = l1->next;
      auto l2_next = l2->next;
      l1->next = l2;
      l2->next = l1_next;
      l1 = l1_next;
      l2 = l2_next;
      i++;
    }
    l1 = tmp_head;
  }
  //链表反转
  ListNode* backList(ListNode* head)
  {
    ListNode* new_head = nullptr;
    ListNode* tmp = nullptr;
    if (!head || !head->next) return head;
    while (head)
    {
      tmp = head;
      head = head->next;

      tmp->next = new_head;
      new_head = tmp;
    }
    return new_head;
  }
};

全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务