商城网站建设是 什么软件,高端大气的医院网站,贵阳做网站的大公司,大连建设网球场价格1.问题描述 给你单链表的头节点 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;head []
输…1.问题描述 给你单链表的头节点 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 难度等级 简单 题目链接
2.解题思路 这道反转链表的题目属于简单题目我们就短话短说快速解决吧。 首先判断链表是否为空或者只有一个元素若链表为空或只有一个元素直接返回即可。 if(head null || head.next null){return head;} 接着我们就可以开始反转链表了。首先我们需要定义一个指针来存储前一个节点以及一个指针用来遍历当前节点。 //前一个节点ListNode pre null;//当前节点ListNode cur head; 我们反转的基本步骤: 先用一个临时指针存储当前节点的下一个节点; //临时存储下一个节点ListNode temp cur.next; 然后将当前节点的next指针指向前一个节点; //修改当前节点的下一个节点为上一个节点cur.next pre; 再将前一个节点的指针指向当前节点; //更新上一个节点pre cur; 最后将当前指针更新为临时指针中存储的节点; //更新当前节点cur temp; 我们用一个while循环来遍历反转直到反转到链表末尾为止。 反转完成后将新的链表头返回即可。 return pre;
3.代码展示
/*** 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) {if(head null || head.next null){return head;}//前一个节点ListNode pre null;//当前节点ListNode cur head;while(cur ! null){//临时存储下一个节点ListNode temp cur.next;//修改当前节点的下一个节点为上一个节点cur.next pre;//更新上一个节点pre cur;//更新当前节点cur temp;} return pre;}
}
4.总结 这道题没啥好讲的理解好反转链表的四个步骤这道题就迎刃而解了。祝大家刷题愉快~