题解 | #链表的奇偶重排#

链表的奇偶重排

https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3

这道题的思路就是将链表节点存放到两个集合中。奇节点存放集合1中,偶节点存放到集合2中。
  //存放奇节点
        List<ListNode> listNodeList1 = new ArrayList<>();
        //存放偶节点
        List<ListNode> listNodesList2 = new ArrayList<>();

        int i = 1;
        while (head != null) {
            if (i % 2 != 0) {
                listNodeList1.add(head);
            } else {
                listNodesList2.add(head);
            }
            head = head.next;
            i++;
        }

之后就简单了,创建一个虚拟头节点,然后遍历集合,将链表连起来返回即可。
        ListNode res=new ListNode(-1);
        ListNode result=res;
        for (ListNode listNode : listNodeList1) {
            res.next=listNode;
            res=res.next;
        }

        for (ListNode listNode : listNodesList2) {
            res.next=listNode;
            res=res.next;
        }
        res.next=null;
        return result.next;
    }
总体代码如下:
    /*
        给定链表,奇节点放在一起,偶节点放在一起,然后输出
        思路:将奇节点,偶节点分别放在两个集合中,然后重新连接

     */
    public ListNode oddEvenList(ListNode head) {
        //存放奇节点
        List<ListNode> listNodeList1 = new ArrayList<>();
        //存放偶节点
        List<ListNode> listNodesList2 = new ArrayList<>();

        int i = 1;
        while (head != null) {
            if (i % 2 != 0) {
                listNodeList1.add(head);
            } else {
                listNodesList2.add(head);
            }
            head = head.next;
            i++;
        }

        ListNode res=new ListNode(-1);
        ListNode result=res;
        for (ListNode listNode : listNodeList1) {
            res.next=listNode;
            res=res.next;
        }

        for (ListNode listNode : listNodesList2) {
            res.next=listNode;
            res=res.next;
        }
        res.next=null;
        return result.next;
    }



#哈啰出行招聘##字节测试开发一面面经#
全部评论

相关推荐

02-04 17:01
南昌大学 Java
牛客96763241...:拿插件直接投就完了,这玩意看运气的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务