自学内容网 自学内容网

力扣206.反转链表

题目链接:206. 反转链表 - 力扣(LeetCode)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]

  • -5000 <= Node.val <= 5000

双指针:

/**
 * 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) {
        ListNode pre=null;
        ListNode curr=head;
        ListNode tmp=null;
        while(curr!=null){
            tmp=curr.next;//临时指针,趁curr和下一个结点还连着的时候保存curr.next
            curr.next=pre;
            pre=curr;
            curr=tmp;
        }
        return pre;
    }
}

递归:

/**
 * 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) {
        //递归
        return reverse(head,null);
    }
    public ListNode reverse(ListNode curr,ListNode pre){
        if(curr==null){
            return pre;
        }else{
            ListNode tmp=null;
            tmp=curr.next; //保存下一个结点
            curr.next=pre; //反转
            return reverse(tmp,curr);
        }
    }
}


原文地址:https://blog.csdn.net/m0_74931837/article/details/142771093

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!