题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
迭代法
解这道题最容易想到的方法就是迭代法,建立一个新的空链表,在遍历给定链表的同时,从后向前一步一步的建立新链表的节点。
/**
* 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 node = null;//建立的新的空链表
while(head!=null){
ListNode pre = new ListNode(head.val);//每次遍历中建立一个节点,其值是当前遍历到的节点的值
pre.next = node;//该节点指向建立的链表
node = pre; //链表头前移
head = head.next;//当前指针后移
}
return node;
}
}
执行用时 0ms 内存消耗 39.8MB。
递归法
class Solution {
public ListNode reverseList(ListNode head) {
//递归法
if(head == null || head.next == null) return head;
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
}
用时 0ms 内存消耗 39.9MB。