链表的反转
节点的构造
static class ListNode {
int val;
ListNode next;
public ListNode ( int val , ListNode next) {
this . val = val;
this . next = next;
}
@Override
public String toString ( ) {
return "ListNode{" +
"val=" + val +
", next=" + next +
'}' ;
}
}
迭代方式
public static ListNode iterate ( ListNode head) {
ListNode prev = null , next;
ListNode curr = head;
while ( curr != null ) {
next = curr. next;
curr. next = prev;
prev = curr;
curr = next;
}
return prev;
}
递归方式
public static ListNode recursion ( ListNode head) {
if ( head == null || head. next == null ) {
return head;
}
ListNode new_head = recursion ( head. next) ;
head. next. next = head;
head. next = null ;
return new_head;
}
测试
public static void main ( String [ ] args) {
ListNode node6 = new ListNode ( 6 , null ) ;
ListNode node5 = new ListNode ( 5 , node6) ;
ListNode node4 = new ListNode ( 4 , node5) ;
ListNode node3 = new ListNode ( 3 , node4) ;
ListNode node2 = new ListNode ( 2 , node3) ;
ListNode node1 = new ListNode ( 1 , node2) ;
System . out. println ( node1) ;
ListNode result = iterate ( node1) ;
System . out. println ( "迭代方式" + result) ;
ListNode result2 = recursion ( node1) ;
System . out. println ( "递归--" + result2) ;
}