反转链表

问题描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

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

三种方法

    1.迭代(双指针在原链表反转)
    2.递归(子问题)
    3.使用一个数组存储链表再遍历

视频讲解

方法1:迭代

双指针

class Solution {
    public ListNode reverseList(ListNode head) {//迭代,双指针
        ListNode cur=head,pre=null;
        
        while(cur!=null){
            ListNode next=cur.next;
            cur.next=pre;
            pre=cur;
            cur=next;
        }
        return pre;
    }
}

方法2:递归(子问题)

递归步骤:划分子问题,合并子问题,递归出口

public ListNode reverseList(ListNode head) {//递归
        if(head==null || head.next==null) return null;

        ListNode ans = reverseList(head.next);//ans是反转后子链表的头指针

        //合并子问题
        head.next.next=head;
        head.next=null;
        return ans;
    }

方法3:使用一个数组存储链表再遍历

。。。

posted @ 2022-02-25 14:32  weiambt  阅读(44)  评论(0)    收藏  举报