LeetCode:206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 :
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
最简单的方法,就是迭代。
public static Node reverseList(Node head) { if(head==null || head.next==null){ return head; } Node prev = null; while (head != null){ //假设当前链表head:A->B->C->null Node temp = head.next; //temp临时链表:B->C->null head.next = prev; //head指向prev后:A->null prev = head; //prev被赋值后:A->null head = temp; //head再次被赋值,进入下一次迭代:B->C->null } return prev; }
其次,就是递归。
public static Node reverseList(Node head) { if(head==null || head.next==null){ return head; } //假设当前链表head:A->B->C->null Node last = reverseList(head.next); //先递归到最后一个元素last:C->null;此时head:B->C->null head.next.next = head; //注意这步,反转指针,参考上一步,则得到C->B->C->B->...循环 head.next = null;//这一步是为了中断上一步的无限循环 return last; }