----------持续更新蓝桥杯入门系列算法实例------------
如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!
你的点赞、关注、评论、是我创作的动力!
-------希望我的文章对你有所帮助--------
前言:如果有一定链表基础,来学习本篇文章的实例将更好理解哦!
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:

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

输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
解题思路:1、本题的目标很明确,就是对整个链表进行反转,通过对于链表元素进行操作,而不是改变其Value!
2、本题较为容易理解的就是使用双指针法,即创建一个pre指针,且赋值为null,一个cur指针,表示指向当前元素。
3、首先,将cur指针初始化指向head头指针,其次再创建一个next节点,赋值为cur.next
4、其实这个next节点表示的是指向head指针的下一个元素!
5、再将cur.next指针指向pre,即改变了head的指针方向(抽象上)
6、再次,将cru赋值给pre,即完成了一次反转,最后再使得cur赋值给next,开始下一次反转
7、最后返回pre,即完成全部反转!
8、动图演示:
(图中pre为本题中的cur,原理其实一样)
- public static ListNode reverseList(ListNode head) {
- ListNode pre=null;
- ListNode cru=head;
- while (cru!=null){
- ListNode next=cru.next;
- cru.next=pre;
- pre=cru;
- cru=next;
- }
- return pre;
- }
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:

输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1 输出:[5]
解题思路:1、本题是上一题的升级版,如果学会第一题,那么第二题则是会更加的得心应手
2、本题是对于部分的链表元素的反转,难度加大
3、需要确定反转链表的位置,即left和right
4、首先创建一个虚拟头节点,赋值为-1,因为head可能是变化的,并且指向head。
5、将头节点赋值给pre,并且开始遍历链表直到 left-1的位置,并且记录给RightNode节点
6、再次移动RightNode,到right+1 的位置,并且记录当前指针位置
7、开始切割,即将left到right这段链表的前一个next指针和后一个next指针置空!
8、再通过相同的方式,如第一题般反转链表
9、将反转的链表拼装回去,即可得到局部反转的链表,最后返回虚拟节点的下一个节点(head)
请问你学废了吗?
- public ListNode reverseBetween(ListNode head, int left, int right) {
- ListNode D_Node=new ListNode(-1);//虚拟节点
- D_Node.next=head;
- ListNode pre=D_Node;
- for(int i=0;i
1;i++){//移到left前一个next指针 - pre=pre.next;
- }
- ListNode RigthNode=pre;//记录当前位置继续遍历
- for (int i=0;i
1;i++){ - RigthNode=RigthNode.next;
- }
- ListNode LeftNode=pre.next;//链表左端
- ListNode cur=RigthNode.next;//链表右端
- pre.next=null;//切割
- RigthNode.next=null;
- ReverseList(LeftNode);//反转
-
- pre.next=RigthNode;//拼接
- LeftNode.next=cur;
-
- return D_Node.next;
-
- }
- public static ListNode ReverseList(ListNode head1){
- ListNode pre=null;
- ListNode cru=head1;
- while (cru!=null){
- ListNode next=cru.next;
- cru.next=pre;
- pre=cru;
- cru=next;
- }
- return pre;
- }
感谢爱学习的你看到了最后,点个关注、赞支持一下吧!