Reverse a singly linked list.
---------------------------------------------------------------------------------------------------
题意
反转一个链表
思路
反转链表总的来说有两种方式:1.递归,2.非递归
代码
1.非递归
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
while(head != null){
ListNode temp = head.next;
head.next = prev;
prev = head;
head = temp;
}
return prev;
}
}
过程如下图,其中1,2,3,4代表while循环中的四条语句。
第一次循环:
第二次循环
第三次循环
第四次循环
head为空,结束循环。
方法二:递归方式
public static ListNode reverseList(ListNode head){
if(head == null || head.next==null) return head;
ListNode prev =reverseList(head.next);
head.next.next = head;
head.next = null;
return prev;
}
过程如下图
递归一:
递归二:
递归三: