链表问题之链表反转<Java实现>

public class 链表反转 {
	/**
	 * 链表节点类
	 * @author Sking
	 */
	protected class ChainNode {
		public Object element;
		public ChainNode next;
		public ChainNode(Object element, ChainNode next) {
			this.element = element;
			this.next = next;
		}
	}
	
	/**
	 * 非递归算法实现链表反转问题:
	 * 给定一个链表头指针,只允许遍历链表一次,将链表反转
	 * @param firstNode 指定链表的头指针
	 * @return 反序链表的头指针
	 */
	public static ChainNode reverseLinkedlist0(ChainNode firstNode){
		//空链表或单节点链表,不作处理
		if(firstNode==null||firstNode.next==null)
			return firstNode;
		else{
			ChainNode p=firstNode;//当前处理节点的下一个节点
			ChainNode q=null;//当前处理节点的前一个节点
			ChainNode r=null;//当前处理节点
			while(p!=null){
				r=p;
				p=p.next;
				r.next=q;
				q=r;
			}
			return r;
		}	
	}

	/**
	 * 递归算法实现链表反转问题:
	 * 给定一个链表头指针,只允许遍历链表一次,将链表反转
	 * @param firstNode 指定链表的头指针
	 * @return 反序链表的头指针
	 */
	public static ChainNode reverseLinkedlist1(ChainNode firstNode){
		//空链表或单节点链表,不作处理
		if(firstNode==null||firstNode.next==null)
			return firstNode;
		else{
			ChainNode p=firstNode;
			ChainNode r=reverseLinkedlist1(p.next);
			p.next.next=p;
			p.next=null;
			return r;
		}	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值