自适应网站建设都找全网天下,中小微企业网站建设,制作网页页面,重庆企业网站建设哪家专业206.反转链表
题目
给你单链表的头节点 head #xff0c;请你反转链表#xff0c;并返回反转后的链表。
示例
示例1 输入#xff1a;head [1,2,3,4,5]
输出#xff1a;[5,4,3,2,1]示例2 输入#xff1a;head [1,2]
输出#xff1a;[2,1]示例3
输入#xff1a;hea…206.反转链表
题目
给你单链表的头节点 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
**进阶**链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题
解答
递归的终止条件是当前节点或者下一个节点null在函数内部改变节点的指向也就是 head 的下一个节点指向 head 递归函数那句返回新的节点 使用递归解答Java
/*** 定义节点类*/
AllArgsConstructor
NoArgsConstructor
ToString
public class ListNode {int val;ListNode next;
}class Solution {/*** 反转链表* param head 头节点* return 反转后的头节点*/public ListNode reverseList(ListNode head) {// 使用递归(如果节点为空 那么返回null)if(head.next null){return head;}// 创建新的节点(依次往下进行寻找 找到最后一个节点)ListNode newLinkedNode reverseList(head.next);// 将最后一个节点的next指向当前节点head.next.next head;// 将当前节点的next指向nullhead.next null;// 返回新的节点return newLinkedNode;}TestDisplayName(测试-反转链表)public void test(){ListNode head new ListNode(1,new ListNode(2,new ListNode(3,new ListNode(4,new ListNode(5,null)))));ListNode result reverseList(head);System.out.println(result.toString() result.toString());}
}