package niuke;
public class MaxNum {
//链表反转
public ListNode reverseList(ListNode pHead){
if(pHead==null)
return null;
ListNode pre=null;
//ListNode cur=pHead.next;
//ListNode tmp;
//pHead.next=null;
while(pHead!=null){
ListNode tmp=pHead.next;
pHead.next=pre;
pre=pHead;
pHead=tmp;
}
return pre;
}
//递归版本
public ListNode reverseList2(ListNode pHead){
if(pHead==null||pHead.next==null)
return pHead;
// pHhead看作是前一结点,pHead.next是当前结点,reHead是反转后新链表的头结点
ListNode reHead = reverseList2(pHead.next);// 先反转后续节点pHead.next
pHead.next.next=pHead;// 将当前结点的指针域指向前一结点
pHead.next=null;// 前一结点的指针域令为null;
return reHead;// 反转后新链表的头结点
}
public void showNode(ListNode pHead){
if(pHead==null) return;
int count=0;
while(pHead!=null){
System.out.println("第"+count+"次:"+pHead.val);
pHead=pHead.next;
count++;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ListNode head=new ListNode(1);
ListNode head1=new ListNode(5);
ListNode head2=new ListNode(4);
ListNode head3=new ListNode(2);
ListNode head4=new ListNode(6);
ListNode head5=new ListNode(7);
head.next=head1;
head1.next=head2;
head2.next=head3;
head3.next=head4;
head4.next=head5;
head5.next=null;
MaxNum mn=new MaxNum();
System.out.println("调用函数前:");
mn.showNode(head);
ListNode head_new=mn.reverseList(head);
System.out.println("调用函数后:");
mn.showNode(head_new);
}
}
结果如下:
调用函数前:
第0次:1
第1次:5
第2次:4
第3次:2
第4次:6
第5次:7
调用函数后:
第0次:7
第1次:6
第2次:2
第3次:4
第4次:5
第5次:1