算法刷题——剑指Offer 反转链表

剑指Offer 反转链表

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

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

解法一:迭代法
1、首先,我们就是要把指针反向指,让结果反向输出。那么第一个就是要让1这个节点指向null,2指向1
2、2指向1之后,要记住后面一个3,不然后面找不到了。
3、定义一个prev,让其指向null
4、定义一个next,让其留住后面的节点地址,防止找不到。
5、定义一个当前变量curr,让其指向前一个节点,比如2指向1。

代码:

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre=null,next;
        ListNode cur=head;
        while(cur!=null){
            next=cur.next;
            cur.next=pre;
            pre=cur;
            cur=next;
        }
        return pre;
    }
}

解法二:递归法
递归的思想就是反复调用一个重复的过程,从而完成整个代码。
我们先是可以理解1的下一个节点是2,2的下一个节点是3,我们要反向输出节点就是要2指向1,1指向null,那么就是1的下一个节点的下一个节点(2)指向1,1的下一个节点指向null。即head.next.next=head; head.next=null;
然后就是两个结点之间不断进行这样的指向,从而完成反向输出。
代码:

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode node=reverseList(head.next);
        head.next.next=head;
        head.next=null;
        return node;
    }
}

在这里插入图片描述


版权声明:本文为weixin_45667289原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。