Java单双链表的创建、反转与递归反转

package com.serein; 
public class ListReversal  

    private int[] _dataArray = null; 
     
    public ListReversal(int[] dataArray) 
    { 
        this._dataArray = dataArray; 
    } 
     
    /**
     * create a single list
     * @return
     */ 
    public ChildNode createSingleList() 
    { 
        if(null == this._dataArray || this._dataArray.length==0) 
        { 
            return null; 
        } 
         
        ChildNode head = new ChildNode(); 
        head.data = this._dataArray[0]; 
        ChildNode pro = head; 
         
        for(int index=1; index<this._dataArray.length; index++) 
        { 
            ChildNode current = new ChildNode(); 
            current.data = this._dataArray[index]; 
             
            pro.next = current; 
            pro = current; 
        } 
         
        return head; 
    } 
     
    /**
     * reversal single list
     * @param head
     * @return
     */ 
    public ChildNode reversalSingleList(ChildNode head) 
    { 
        if(null == head) 
        { 
            return null; 
        } 
        ChildNode current = head; 
        ChildNode pro = null; 
        ChildNode next = null; 
         
        while(null != current) 
        { 
            next = current.next; 
            current.next = pro; 
            pro = current; 
            current = next; 
        } 
         
         
        return pro; 
    } 
     
    public ChildNode recursionSingleList(ChildNode current, ChildNode pro) 
    { 
        if(null == current) 
        { 
            return pro; 
        } 
        ChildNode next = current.next; 
        current.next = pro; 
        return recursionSingleList(next, current); 
    } 
     
    public class ChildNode 
    { 
        public ChildNode next = null; 
        public int data = -1; 
    } 
     
    public class DoubleChildNode 
    { 
        public DoubleChildNode pro = null; 
        public DoubleChildNode next = null; 
        public int data = -1; 
    } 
     
    public DoubleChildNode createDoubleList() 
    { 
        if(null == this._dataArray || this._dataArray.length==0) 
        { 
            return null; 
        } 
         
        DoubleChildNode head = new DoubleChildNode(); 
        head.data = this._dataArray[0]; 
        DoubleChildNode pro = head; 
         
        for(int index=1; index<this._dataArray.length; index++) 
        { 
            DoubleChildNode current = new DoubleChildNode(); 
            current.data = this._dataArray[index]; 
             
            pro.next = current; 
            current.pro = pro; 
            pro = current; 
        } 
         
        return head; 
    } 
     
    public DoubleChildNode recursionDoubleList(DoubleChildNode current, DoubleChildNode pro) 
    { 
        if(null == current) 
        { 
            return pro; 
        } 
         
        DoubleChildNode next = current.next; 
        current.next = current.pro; 
        current.pro = next; 
        return recursionDoubleList(next, current); 
    } 
     
    public DoubleChildNode reversalDoubleList(DoubleChildNode head) 
    { 
        if(null == head) 
        { 
            return null; 
        } 
         
        DoubleChildNode current = head; 
        DoubleChildNode next = null; 
         
        while(null != current) 
        { 
            next = current.next; 
            current.next = current.pro; 
            current.pro = next; 
            if(null == next) 
            { 
                head = current; 
            } 
            current = next; 
        } 
         
        return head; 
    } 
     
    public static void main(String[] args) 
    { 
        System.out.println("This is a test!"); 
        int[] dataArray = {1, 3, 5, 6, 7, 8}; 
         
        ListReversal lr = new ListReversal(dataArray); 
         
        ListReversal.ChildNode node = lr.createSingleList(); 
        ListReversal.ChildNode nodeReversal = lr.reversalSingleList(node); 
        ListReversal.ChildNode nodeRecursionReversal = lr.recursionSingleList(nodeReversal, null); 
         
        ListReversal.DoubleChildNode doubleNode = lr.createDoubleList(); 
        ListReversal.DoubleChildNode doubleNodeReversal = lr.reversalDoubleList(doubleNode); 
        ListReversal.DoubleChildNode doubleNodeRecursionReversal = lr.recursionDoubleList(doubleNodeReversal, null); 
    } 

转载于:https://www.cnblogs.com/xiangtongpeng/archive/2011/12/25/2300849.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值