java 单链表反转

将单向链表发转方向,头变尾,尾变头,将链表调个个儿。

思路:定义三个引用,pre为上一结点,cur为当前节点,nex为下一结点。
把cur的下一节点暂存到nex中,然后将cur的下一节点指向pre,再将pre指向cur,cur指向nex。只要cur不为空,就一直如此循环。直到cur为空,即最后一个节点的next结点为空。最后再把原链表的头节点变成了尾节点,所以要把它的next节点设置为null。
 

代码实现:

首先定义一个最简单的单链表数据结构。结构很简单,一个String类型的data,一个指向下一个节点的引用。

public class MyList {
    private MyList next;
    private String data;

    public MyList getNext() {
        return next;
    }

    public void setNext(MyList next) {
        this.next = next;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public MyList(String data) {
        this.data = data;
    }
}
public class ConverMyList {
    public static MyList conver(MyList myList) {
        if (myList == null) {
            System.out.println("error");
            return myList;
        }

        MyList pre = myList;
        MyList cur = myList.getNext();
        MyList nex;
        while (cur != null) {
            nex = cur.getNext();
            cur.setNext(pre);
            pre = cur;
            cur = nex;
        }
        myList.setNext(null);
        return pre;
    }

    public static void main(String[] args) {
        MyList myList = new MyList("a");
        MyList myList2 = new MyList("b");
        MyList myList3 = new MyList("c");
        MyList myList4 = new MyList("d");
        MyList myList5 = new MyList("e");
        myList.setNext(myList2);
        myList2.setNext(myList3);
        myList3.setNext(myList4);
        myList4.setNext(myList5);

        System.out.println(JSON.toJSONString(myList));
        //调用反转方法
        MyList converList = conver(myList);
        System.out.println(JSON.toJSONString(converList));
    }
}

输出结果:

{"data":"a","next":{"data":"b","next":{"data":"c","next":{"data":"d","next":{"data":"e"}}}}}
{"data":"e","next":{"data":"d","next":{"data":"c","next":{"data":"b","next":{"data":"a"}}}}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值