美文网首页
单链表翻转

单链表翻转

作者: 联想桥南 | 来源:发表于2017-11-17 22:27 被阅读0次
package com.lxqn.jiapeng.leetcode;

/**
 * 单链表反转
 * Created by jiapeng on 2017/11/17.
 */
public class SingnalLinkedReverse {

    public static Node reverse(Node head) {
        //头节点为null的情况
        if(head==null){
            return head;
        }
        //pre用来保存反转后的目标节点
        Node pre= head;
        //使用三个节点判断出处理一般情况
        Node cur=head.getNextNode();

        Node next;

        //程序的主体,判断cur是否为空
        while(cur!=null){
            //next保存下一节点,防止cur指向pre时,链表断裂
            next= cur.getNextNode();
            //链表指向反转
            cur.setNextNode(pre);
            //同时移位
            /*
             * 注意顺序,这样跑不通
             * cur = next;
             * pre= cur;
             */
            pre= cur;
            cur = next;
        }
        //cur为空时,表示链表到头,把head指向null
        head.setNextNode(null);
        //把反转后的头节点pre赋值给head返回
        head = pre;
        return head;
    }

    public static void main(String[] args) {
        //创建单链表0 1 2 3
        Node head = new Node(0);
        Node node1 = new Node(1);
        Node node2 = new Node(2);
        Node node3 = new Node(3);
        head.setNextNode(node1);
        node1.setNextNode(node2);
        node2.setNextNode(node3);
        node3.setNextNode(null);

        SingnalLinkedReverse single= new SingnalLinkedReverse();
        single.printLink(head);
        System.out.println("");
        System.out.println("************");
        Node reverseNode = SingnalLinkedReverse.reverse(head);
        single.printLink(reverseNode);

    }

    //遍历打印单链表
    public void printLink(Node head){
        if(head!=null){
            System.out.print(head.getRecord()+" ");
            Node cur = head.getNextNode();
            Node next;
            while(cur!=null){
                System.out.print(cur.getRecord()+" ");
                next=cur.getNextNode();
                cur= next;
            }
        }
    }

    private static class Node{
        public Node(int value){
            this.value= value;
        }
        private int value;
        private Node nextNode;
        private void setNextNode(Node node){
            this.nextNode = node;

        }
        private Node getNextNode(){
            return nextNode;
        }
        private int getRecord(){
            return value;
        }
    }
}

相关文章

  • 翻转单链表

    翻转单链表 方法一:将单链表头插到一个新链表中 浪费空间,不过简单 方法二:使用三个指针遍历单链表,逐个点进行翻转...

  • 单链表反转的递归方法和非递归方法

    链表的节点可以定义为: 测试的输入数据,每次使用root作为方法的入参 使用循环来翻转单链表 思路 翻转单链表,其...

  • 链表的操作和算法相关

    github->demo1、创建(单链表、双链表、循环链表)2、翻转单链表(递归和非递归)3、判断链表是否存在环。...

  • 单链表翻转

    单链表的就地逆置:就地逆置即空间复杂度为O(1)一:用数组存储单链表的值,然后重新逆序赋值,效率较低。二:利用三个...

  • 单链表翻转

  • 翻转单链表

    在有关链表的题目中,最需要注意的地方就是各个结点引用的调整,否则很容易因为混乱的指向导致死循环等情况。 技巧:定义...

  • 单链表翻转

    循环 递归

  • 翻转单链表

  • 翻转单链表

    结果: 完整测试代码:

  • Reverse LinkList

    问题 翻转单链表举例:原始链表: 1->2->3->4就地翻转,翻转后: 4->3->2->1 主要思路 需要两个...

网友评论

      本文标题:单链表翻转

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