import DataStruct.LinkNode;
public class LinkListReverse {
/**
* 题目:给定一个单链表,要求不使用栈实现链表的翻转;
* 解决思路:设立三个指针,分别指向相邻的三个节点,在最开始:left指向null,mid指向头节点,right指向头节点的下一个节点,然后依次修改mid与right的next指针
* 依次循环下去,直至最后right为空,即表示到达链表尾,退出循环;最后需要将mid的next指针指向left节点以完成最后的链接,返回mid指针。
* 时间开销:O(N),空间开销 :O(3);
* @param args
* @author Adai
* @since 2013/06/16
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkListReverse llr=new LinkListReverse();
int[] a={1,2,3,4,5,6,7,8,9,0};
LinkNode head=llr.InitList(a);
LinkNode after=llr.LinkReverse(head);
while(after.getNext()!=null){
System.out.println(after.getData());
after=after.getNext();
}
}
private LinkNode InitList(int[] a){
LinkNode head=new LinkNode(-1);
LinkNode now=head;
for(int i:a){
LinkNode one=new LinkNode(i);
now.setNext(one);
now=one;
}
return head;
}
private LinkNode LinkReverse(LinkNode head){
if(head==null){
return null;
}else if(head.getNext()==null){
return head;
}
LinkNode left=null;
LinkNode mid=head;
LinkNode right=mid.getNext();
while(right!=null){
mid.setNext(left);
left=right.getNext();
right.setNext(mid);
mid=left;
left=right;
right=mid.getNext();
}
mid.setNext(left);
return mid;
}
}
不依赖堆栈的链表反转——java实现
最新推荐文章于 2024-07-23 19:26:09 发布