网站登录验证码是怎么做的,1688官网,互联网三网合一网站建设,龙南城市建设局网站目录 题目描述#xff1a;示例 1#xff1a;示例 2#xff1a;代码实现#xff1a; 题目描述#xff1a;
给你单链表的头指针 head 和两个整数 left 和 right #xff0c;其中 left right 。请你反转从位置 left 到位置 right 的链表节点#xff0c;返回 反转后的… 目录 题目描述示例 1示例 2代码实现 题目描述
给你单链表的头指针 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]
代码实现
/*** 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 reverseBetween(ListNode head, int left, int right) {ListNode tmp new ListNode(-1);// 设置哑结点tmp.next head;// 哑结点指向头节点// pre指向哑结点ListNode pre tmp;// 使pre指向反转链表的前一个结点for (int i 0; i left - 1; i) {pre pre.next;}ListNode rightNode pre;// 记录反转链表的前一个结点for (int i 0; i right - left 1; i) {rightNode rightNode.next;// 找到反转链表的尾结点}ListNode leftNode pre.next;// 记录反转链表的头节点ListNode endList rightNode.next;// 记录反转链表的后一个结点// 断开原来链表将需要反转的链表切割开pre.next null;// 切割头节点rightNode.next null;// 切割尾结点// 反转链表操作reverseLinkedList(leftNode);// 连接链表操作pre.next rightNode;// 原先反转链表的前驱 指向 现在反转之后的链表的右节点也就是现在的头节点leftNode.next endList;// 反转之后的链表左节点也就是现在的尾结点 指向 原先反转链表的后继// 返回哑结点的后继return tmp.next;// 这里不返回head结点的原因是在反转操作时head已经指向反转链表的尾结点了}// 反转函数反转了结点之间的指向head指向的是反转之后的尾结点void reverseLinkedList(ListNode head) {ListNode cur head;// 头节点开始遍历ListNode pre null;// 前驱结点while (cur ! null) {ListNode next cur.next;// 记录后继结点cur.next pre;// 结点指向前驱pre cur;// 前驱指针指向当前结点cur next;// 当前指针指向后继结点}}
}