
就地反转和递归反转?
public class VerseLink {
//直接遍历一遍
public static ListNode verseLink(ListNode head){
ListNode previous,current,post;
previous = null;
current = head;
while (current != null){
post = current.next;
current.next = previous;
previous = current;
current = post;
}
head = prev;
return head;
}
//递归反转
public static ListNode recursiveVerseLink(ListNode head){
if(head == null || head.next == null){
return head;
}
ListNode newHead = recursiveVerseLink(head.next);//原链表的最后一个结点
head.next.next = head;//从倒数第二个结点开始回溯,指针发生转向
head.next = null;//断开原来指针
return newHead;
}
public static void main(String[] args){
Link link = new Link();
link.add(1);
link.add(2);
link.add(3);
link.add(4);
Link.head = VerseLink.recursiveVerseLink(Link.head);
link.print();
}
}
近期评论