题目描述
206#反转链表
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
解法:
1. 迭代 -- 头插法
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode root = null;
while(head!=null){
ListNode temp = head; //获取头结点
head=head.next;
temp.next=root; //头插新链表
root=temp;
}
return root;
}
}
方法二:递归法
从尾部开始逆转,每次将前一个节点插到已经逆转好的尾部。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null) return null;
if(head.next==null) return head;
ListNode second =head.next;
ListNode rest=reverseList(second);
second.next=head;
head.next=null;
return rest;
}
}