美文网首页
奇偶链表排序

奇偶链表排序

作者: 编程小王子AAA | 来源:发表于2020-08-13 09:32 被阅读0次

奇偶链表排序

/**
 * @data Administrator
 * @data 2020/8/10 0010
 */
public class SplitListNode {

    private static class ListNode {

        int val;
        ListNode next;

        ListNode(int val) {
            this.val = val;
        }
    }

    //按奇数偶数位置拆分两个链表
    private static ListNode[] splitList(ListNode head) {
        ListNode head1 = null;
        ListNode head2 = null;
        ListNode cur1 = null;
        ListNode cur2 = null;
        int count = 1;
        while (head != null) {
            if (count % 2 == 1) {
                if (cur1 != null) {
                    cur1.next = head;
                    cur1 = cur1.next;
                } else {
                    cur1 = head;
                    head1 = cur1;
                }
            } else {
                if (cur2 != null) {
                    cur2.next = head;
                    cur2 = cur2.next;
                } else {
                    cur2 = head;
                    head2 = cur2;
                }
            }
            head = head.next;
            count++;
        }
        cur1.next = null;
        cur2.next = null;
        return new ListNode[]{head1, head2};
    }

    //反转链表
    private static ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode temp = curr.next;
            curr.next = pre;
            pre = curr;
            curr = temp;
        }
        return pre;
    }

    //合并两个有序链表
    private static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);
        ListNode cur = dummy;
        while (l1 != null && l2 != null) {
            if (l1.val < l2.val) {
                cur.next = new ListNode(l1.val);
                l1 = l1.next;
            } else {
                cur.next = new ListNode(l2.val);
                l2 = l2.next;
            }
            cur = cur.next;
        }
        if (l1 != null) {
            cur.next = l1;
        } else {
            cur.next = l2;
        }
        return dummy.next;
    }

    //打印链表
    private static void printList(ListNode head) {
        if (head == null) {
            return;
        }
        ListNode cur = head;
        while (cur != null) {
            System.out.print(cur.val + "\t");
            cur = cur.next;
        }
    }

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        ListNode node2 = new ListNode(8);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(6);
        ListNode node5 = new ListNode(5);
        ListNode node6 = new ListNode(4);
        ListNode node7 = new ListNode(7);
        head.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node7;
        ListNode[] heads = splitList(head);
        ListNode reverse = reverseList(heads[1]);
        ListNode merge = mergeTwoLists(heads[0], reverse);
        printList(merge);
    }

}

相关文章

  • 奇偶链表排序

    奇偶链表排序

  • 单向链表节点的奇偶排序

    更详细的讲解和代码调试演示过程,请参看视频如何进入google,算法面试技能全面提升指南 给定一个单项链表,要求实...

  • 【链表】 奇偶链表

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而...

  • 链表--奇偶链表

    目录[https://www.jianshu.com/p/85e18c21317a] 题号[https://lee...

  • 奇偶链表

    奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的...

  • 奇偶链表

  • 奇偶链表

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而...

  • 单向链表-奇偶链表

    今天学习的算法是奇偶链表,自己实现后发现虽然方法大致思路是对的。但是最后提交完看解题答案发现竟然还可以这么简单。 ...

  • 奇偶排序

    奇偶排序又叫砖排序,是一种相对简单的算法,最初发明用于有本地互联的并行计算。在具有多处理器的环境中很有用,处理器可...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

网友评论

      本文标题:奇偶链表排序

      本文链接:https://www.haomeiwen.com/subject/jllsdktx.html