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;
}
}
}
链表问题之链表反转<Java实现>
最新推荐文章于 2024-08-19 00:33:13 发布