单向链表和双向链表的反转

package arithmetic;

public class ReverseList {

    public static class Node {
        public int value;
        public Node next;

        public Node(int data) {
            value = data;
        }
    }

    public static class DoubleNode {
        public int value;
        public DoubleNode last;
        public DoubleNode next;

        public DoubleNode(int data) {
            value = data;
        }
    }

    public static Node reverseLinkedList(Node head) {
        Node pre = null;
        Node next = null;
        while (head != null) {
            next = head.next;

            head.next = pre;
            pre = head;

            head = next;
        }
        return pre;
    }

    public static DoubleNode reverseDoubleList(DoubleNode head) {
        DoubleNode pre=null;
        DoubleNode next=null;
        while (head!=null){
            next= head.next;

            head.next=pre;
            head.last=next;
            pre=head;

            head=next;
        }
        return pre;
    }

    public static Node removeValue(Node head, int num) {
        while (head!=null){
            if (head.value!=num){
                break;
            }
            head= head.next;
        }

        //pre为上一个不为num的节点
        Node pre=head;
        //head不动了,最后返回用head,操作当前的cur
        //找到第一个不需要删的位置
        Node cur=head;

        while (cur!=null){
            if (cur.value==num){
                //移除cur元素,将上一节点pre的next指针指向cur的next指针
                pre.next=cur.next;
            }else{
                pre=cur;
            }
            //移动一位
            cur=cur.next;
        }
        return head;
    }
}

 

posted @ 2020-04-25 15:28  杨海陆  阅读(112)  评论(0)    收藏  举报