题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路:
方法一、递归:比较简单。
解析见注释
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode t = head.next; //标记head的后继节点t,后面有用。整个链表反转后,最终应该在head前面
ListNode first = ReverseList(head.next); //将2到n的链表反转
t.next = head; //上一步将2到n的链表反转,反转后t到了尾部。这一步是将head加入到t后面,这样整个链表反转完成。
head.next = null; //由于head到了尾部,记得将后继置为null,不然死循环了
return first;
}
}
方法二、非递归
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode first = null,t=null;
while(head != null){
t = head.next;
head.next = first;
first = head;
head = t;
}
return first;
}
}