单链表(反转,合并)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flower_CSDN/article/details/81879519
package wjh.singlelist.revise;

public class Node {
    int data;
    Node next;

    /**
     * 链表反转(递归)
     * @param node 头结点
     * @param prev 前一个节点,传入null即可
     */
    public static void revise(Node node,Node prev) {
        if(node!=null) {
            Node next=node.next;
            node.next=prev;
            prev=node;
            revise(next,prev);
        }
        return ;
    }

    /**
     * 链表反转(非递归)
     * @param head
     * @return
     */
    public Node revise(Node head) {
        Node next,phead;
        Node node=head;
        Node prev=null;

        while(node!=null) {
            if(node.next==null) {
                head=node.next;
            }
            else {
                next=node.next;
            }
            node.next=prev;
            prev=node.next;
        }

        return head;
    }

    /**
     * 合并两个有序链表,合并之后的链表仍然有序
     * @param node1 链表一
     * @param node2 链表二
     * @return 合并后的链表
     */
    public Node merageList(Node node1,Node node2) {
        Node node=null;//存放要连接的那个小的节点
        if(node1==null) {//若链表1为空直接返回链表2
            return node2;
        }
        if(node2==null) {
            return node1;
        }

        if(node1.data<node2.data) {
            node=node1;
            merageList(node1.next, node2);
        }
        else {
            node=node2;
            merageList(node1, node2.next);
        }
        return node;
    }

    /**
     * 遍历链表元素
     * @param head
     */
    public static void printList(Node head) {
        Node node=head;
        while(node!=null) {
            System.out.print(node.data+"    ");
            if(node.next!=null) {
                node=node.next;
            }
            else {
                node=null;
            }
        }
    }
    /**
     * 得到链表的头结点
     * @param node
     * @return
     */
    public Node getHead(Node node) {
        while(node!=null) {
            if(node.next!=null) {
                node=node.next;
            }
            else {
                return node;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        Node head=new Node();
        head.data=1;
        Node node2=new Node();
        node2.data=2;
        Node node3=new Node();
        node3.data=3;
        Node node4=new Node();
        node4.data=4;
        Node node5=new Node();
        node5.data=5;
        Node node6=new Node();
        node6.data=6;

        head.next=node2;
        node2.next=node3;
        node3.next=node4;
        node4.next=node5;
        node5.next=node6;
        node6.next=null;

        revise(head,null);

        printList(node6);

    }

}

猜你喜欢

转载自blog.csdn.net/flower_CSDN/article/details/81879519