单链表反转

public class ListReverse {
     public static void main(String[] args){
          Node d = new Node("d", null);
          Node c = new Node("c", d);
          Node b = new Node("b", c);
          Node a = new Node("a", b);
          Node head = a;
          System.out.print("排序前:");
          while(head != null){
              System.out.print(head.getData() + " ");
              head = head.getNext();
          }
          //head = resverse1(a);
          head = resverse2(a);
          System.out.print("\n" + "排序后:");
          while(head != null){
              System.out.print(head.getData() + " ");
              head = head.getNext();
          }
     }
     /*
      * 递归实现
      * 从后向前修改指针指向
      */
    private static Node resverse1(Node head) {
        if (head == null || head.getNext() == null) {
            return head;
        }
        Node reHead = resverse1(head.getNext());// 先反转后续节点head.getNext()
        head.getNext().setNext(head);// 将当前结点的指针域指向前一结点
        head.setNext(null);// 前一结点的指针域令为null;
        return reHead;// 反转后新链表的头结点

    }
    
    /*
     * 非递归实现
     * 从前向后修改指针指向
     */
    private static Node resverse2(Node head) {
        if(head == null) {
            return head;
        }
        Node pre = null;
        Node cur = head;
        Node temp = null;
        while (cur != null) {
            temp = cur.getNext();
            cur.setNext(pre);
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}    

class Node{
    private String data;
    private Node next;
    public Node(String data){
        this.data = data;
    }
    public Node(String data, Node next){
        this.data = data;
        this.next = next;
    }
    public void setNext(Node node){
        this.next = node;
    }
    public Node getNext(){
        return next;
    }
    public void setData(String data){
        this.data = data;
    }
    public String getData(){
        return data;
    }
}

 

//递归实现参考 http://blog.csdn.net/guyuealian/article/details/51119499

转载于:https://my.oschina.net/u/3644171/blog/1586145

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值