博客
关于我
【数据结构系列】链表合并问题——链表的奇偶重排
阅读量:353 次
发布时间:2019-03-04

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

题目描述

给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。

注意是节点的编号而非节点的数值。

示例1

输入

{1,2,3,4,5,6}

返回值

{1,3,5,2,4,6}

说明
1->2->3->4->5->6->NULL
重排后为
1->3->5->2->4->6->NULL

示例2

输入

{1,4,6,3,7}

返回值

{1,6,7,4,3}

说明
1->4->6->3->7->NULL
重排后为
1->6->7->4->3->NULL
奇数节点有1,6,7,偶数节点有4,3。重排后为1,6,7,4,3

解题思路

维护两个指针,一个指向奇数链表的头,一个指向偶数链表的头

先将链表分为奇数链表和偶数链表,然后再进行合并。
奇数位置的后面必定是偶数,偶数位置后面必定是奇数,利用这个特点即可解决这道题目~

public class 链表的奇偶重排 {       public class ListNode {           int val;       ListNode next = null;    }    public ListNode oddEvenList (ListNode head) {           if (head == null || head.next == null)            return head;        /*          odd 指向奇数节点的指针          oddHead 指向初始奇数节点的头指针          even 指向偶数节点的指针          evenHead 指向初始偶数节点的头指针         */        ListNode odd = head,oddHead = head,even = head.next,evenHead = head.next;        while (even != null && even.next != null){               //奇数节点指向偶数节点的next            odd.next = even.next;            //奇数节点指针后移            odd = odd.next;            //偶数节点指向奇数节点的next            even.next = odd.next;            //偶数节点后移            even = even.next;        }        //将奇数节点的next指向偶数节点的初始头指针        odd.next = evenHead;        //返回奇数节点的初始头指针        return oddHead;    }}

转载地址:http://ixer.baihongyu.com/

你可能感兴趣的文章
怎么去利用已有的数据做分析?
查看>>
【考研高数-高等数学-基础】第四章 不定积分
查看>>
【考研英语-基础-简单句】简单句的核心变化_谓语情态
查看>>
数据结构 第五章 二叉树-1
查看>>
PVE+集客AC+K2T-AP
查看>>
Jetson AGX Xavier硬件自启动
查看>>
判断移动端(手机)还是客户端(电脑)打开网页并跳转不同页面(首页)
查看>>
眼睛跟随鼠标转动的小黄人 html+css+js
查看>>
简单的字符串操作(注意要点)
查看>>
统计字符数
查看>>
JS 数组的 every()、some() 、filter()、findIndex() 、find()、map()方法
查看>>
Vue Element UI Upload 上传多张图片
查看>>
JS数据类型的判断
查看>>
实现一个简易Vue(三)Compiler
查看>>
仿小米商城(上)
查看>>
仿小米商城(下)
查看>>
【30】kotlin 闭包
查看>>
文件md5怎么会变化
查看>>
好玩的editText
查看>>
自动安装服务2
查看>>