翻转链表2
此博客链接:
翻转链表2
题目链接:https://leetcode-cn.com/problems/reverse-linked-list-ii/
题目
给你单链表的头指针 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]
题解
我一开始想着把链表分为3部分,第一部分是开头不需要翻转的链表,第二部分是需要翻转的部分,把需要翻转的部分使用头插法翻转链表,第三部分是不需要翻转的部分,然后把三部分最后链接在一起,但是当最后一部分链接时,是没有办法链接的,因为中间部分经过头插法翻转链表后,指针是一直指向最前面,不会在指向最后,所以没有办法和第三部分链接。
后来看了题解,原来使用头插法是没有问题的,只是不需要把链表分为三个部分,而是在不需要翻转的部分使用头插法,每次都是把需要翻转的插到第一个需要翻转的元素后面。
代码
class Solution { public ListNode reverseBetween(ListNode head, int left, int right) { ListNode p=head; ListNode q=head; while(q!=null){ if(q.next.val==left) { p=q; q=q.next; break; } } while(p.next.val!=right) { ListNode t=q.next; p.next=t; q.next=t.next; t.next=q; // System.out.println(head); } return head; } }
结果
但是吧,奈何我的程序还是结果不对。
出来混总是要还的