Leetcode#206. 反转链表(Java解法——重要题)

问题描述

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

来源:力扣(LeetCode)

解题思路

有两种方式:

一是迭代,二是递归

如上图所示,创建一个cur指针作为当前需要反转的指针。首先在未反转之前,保存之前的cur.next指针到cur(作为下一个需要反转的指针)。

再将cue.next值设置为pre

操作多次之后,最后一个cur为原本顺序中的null,pre为链表中的最后一个元素,因此返回pre即可。 

Java代码

解法一(迭代):

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null){
            return null;
        }
        ListNode cur = head;
        ListNode pre = null;
        ListNode tmp = new ListNode();
        while(cur!=null){
            tmp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = tmp;
        }
        return pre;

    }
}

解法二(递归):

待补充

猜你喜欢

转载自blog.csdn.net/paranior/article/details/114579283