题解 | #重排链表#

重排链表

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

/**
 * 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) return; //空链表特判
        int len=0;
        auto x = head;
		while(x) {len++;x=x->next;} //统计链表长度
        //通过头插法,将后半部分链表进行反转
        auto mid = new ListNode(-1);
        x = head;
        for(int i=0;i<len;i++){ //利用头插法将链表后半部进行反转
            if(i>=(len >> 1)){
                auto tmp = x->next;
                x->next = mid->next;
                mid->next = x;
                x = tmp;
            }else x = x->next;
        }
	  //此时前半部分正向,后半部分反向,正常进行插入即可
        mid = mid->next;
        x = head;
        for(int i=0;i<(len>>1);i++){
            auto tmp = mid->next;
            mid->next = x->next;
            x->next = mid;
            x = mid->next;
            mid=tmp;
        }
        x->next =  NULL;
    }
};

全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
程序员小白条:投太少了,多投点吧,二本就海投,然后简历上加点奖项或者四六级之类的,别管有没有用,另外最好搞下个人博客,定期输出一些文章和学习总结,也可以去github参与一下开源项目提一些PR,总会有中小公司看的上的
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务