LeetCode刷题之Reverse Linked List

Problem

Reverse a singly linked list.

Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?

My Solution

/**
 * 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 p = head, reverse = new ListNode(0);
        if (p == null) {
            return reverse.next;
        }
        ListNode q = new ListNode(p.val);
        reverse = insertHead(reverse, q);
        while (p.next != null) {
            p = p.next;
            q = new ListNode(p.val);
            reverse = insertHead(reverse, q);
        }
        return reverse.next;
    }
    
    public ListNode insertHead(ListNode reverse, ListNode node) {
        ListNode head = reverse;
        if (head.next == null) {
            head.next = node;
            node.next = null;
        } else {
            node.next = head.next;
            head.next = node;
        }
        return head;
    }
}
Great Solution

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode nextTemp = curr.next;
        curr.next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容