博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode-143. Reorder List
阅读量:7065 次
发布时间:2019-06-28

本文共 1431 字,大约阅读时间需要 4 分钟。

  刚开始刷题,一开始没思路,上网看了一下别人的思路才写出来
  总的思路就是先把链表分为两部分,可以先遍历链表再根据长度分也可以用快慢指针(新知识点),然后将第二部分反转,再依次插入到第一部分。思路很简单,但没用ide还是出错了。。。
 
/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    void reorderList(ListNode* head) {        if(head ==NULL || head->next == NULL ||head->next->next == NULL)            return;        //用快慢指针将链表分为两部分,若为奇数则第一部分大1        ListNode *fast,*slow,*head1,*head2,*post,*cur,*tmp = NULL;        fast = slow = head;        while(fast->next != NULL)        {            fast = fast->next;            if(fast->next == NULL) break;            fast = fast->next;            slow = slow->next;        }        head1 = head;        cur = head2 = slow->next;        slow->next = NULL;  //这里要注意,断开的部分要设NULL        //将第二部分链表反转        post = head2->next;        cur->next = NULL;        while(post!=NULL)        {            tmp = post->next;            post->next = cur;            cur = post;            post = tmp;        }        head2 = cur;        //将第二部分插入到第一部分        ListNode *cur1 = head1;        ListNode *cur2 = head2;        while(cur2!=NULL)        {            tmp = cur1->next;            cur1->next = cur2;            post = cur2->next;            cur2->next = tmp;            cur1 = tmp;            cur2 = post;        }    }};

 

转载于:https://www.cnblogs.com/tonychen-tobeTopCoder/p/5149704.html

你可能感兴趣的文章
1117bootstrap
查看>>
centos6.5上卸载和安装JDK7
查看>>
从文件加载至NSData
查看>>
关于代码通过API操作阿里云RDS的巨坑
查看>>
jqgrid 获取选中行主键集合
查看>>
arraycopy效率比较
查看>>
使用 Linq 对多个对象进行join操作 C#
查看>>
【转载】VC操作剪切板
查看>>
dede二级导航与二级栏目 ----内容介绍二级导航
查看>>
禁止后台运行
查看>>
poj3273(二分)
查看>>
user_add示例
查看>>
dwz框架在网站群项目中的应用(1)—概述
查看>>
C#程序出现引用失败的原因
查看>>
Java中文件的上传与下载
查看>>
十大矩阵经典题目(转)
查看>>
【LeetCode】118 & 119 - Pascal's Triangle & Pascal's Triangle II
查看>>
javascript深入理解js闭包
查看>>
博文收藏夹
查看>>
kibana5.6源码分析2
查看>>