栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

将一个单向链表拆分成两个java实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将一个单向链表拆分成两个java实现

常见的一道笔试题:链表拆分,将一个单向链表和拆分成两个,如下所示:

原始链表:1—>2—>3—>4—>5—>6—>7

拆分后链表A:1—>3—>5—>7

拆分后链表B:2—>4—>6

思路:

定义两个头节点,作为新链表的头,分别指向原链表的前两个元素

再定义两个浮动,初始值分别指向新链表的头结点

然后交替遍历原始节点,将各自的next赋值给新链表

待遍历到最后,需要为两个新链表指定尾节点,即赋值为null

最后退出循环。

class ShowMeBug {
    public static class Node {
        public int data;
        public Node next;

        public Node(int data, Node nxt) {
            this.data = data;
            this.next = nxt;
        }
    }

    
    public void solution(Node head) {

        Node first = head;
        Node second = head.next;
        Node curseA = first;//游标A
        Node curseB = second;//游标B

        while (curseB != null) {

            if (curseB.next != null) {
                curseA.next = curseB.next;
                curseA = curseA.next;
                curseB.next = curseA.next;
                curseB = curseB.next;

            } else {
                curseA.next = null;
                curseB.next = null;
                break;
            }
        }

        printNode(first);
        printNode(second);
    }

    private static void printNode(Node head) {
        while (head != null) {
            System.out.println(head.data);
            head = head.next;
        }
    }


    public static void main(String[] args) {

        ShowMeBug showMeBug = new ShowMeBug();

        Node node7 = new Node(7, null);
        Node node6 = new Node(6, node7);
        Node node5 = new Node(5, node6);
        Node node4 = new Node(4, node5);
        Node node3 = new Node(3, node4);
        Node node2 = new Node(2, node3);
        Node node1 = new Node(1, node2);

        showMeBug.solution(node1);
        //printNode(node1);
    }
}

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016816.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号