LeetCode 206. 反转链表(Java)

  1. 反转链表

反转一个单链表。

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:迭代,用一个指针存储curr的下一个节点,然后每次将prev和curr之间的指向关系反转,然后继续下一对。

/**
 * 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 prev=null;
        ListNode curr=head;
        while(curr!=null)
        {
            ListNode nextNode=curr.next;
            curr.next=prev;
            prev=curr;
            curr=nextNode;
        }
        return prev;
    }
}

第二种:递归

/**
 * 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||head.next==null)
        {
            return head;
        }
        //此时curr指向最后一个节点
        ListNode curr=reverseList(head.next);
        //改变两个节点之间的指向
        head.next.next=head;//构建一个环
        head.next=null;//去掉环中不需要的指向
        return curr;
    }
}
发布了53 篇原创文章 · 获赞 0 · 访问量 1795

猜你喜欢

转载自blog.csdn.net/nuts_and_bolts/article/details/104838327