LeetCode-92. 反转链表 II

男娘i 2024-03-22 15:44 155阅读 0赞

题目来源
206. 反转链表

1、我们定义两个指针,分别称之为 g(guard 守卫) 和 p(point)。 我们首先根据方法的参数 m 确定 g 和 p 的位置。将 g 移动到第一个要反转的节点的前面,将 p 移动到第一个要反转的节点的位置上。我们以 m=2,n=4为例。 2、将 p 后面的元素删除,然后添加到 g 的后面。也即头插法。 3、根据 m 和 n 重复步骤(2) 4、返回 dummyHead.next

在这里插入图片描述

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode() {}
  7. * ListNode(int val) { this.val = val; }
  8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12. public ListNode reverseBetween(ListNode head, int left, int right) {
  13. if(head == null){
  14. return null;
  15. }
  16. //创建虚拟节点
  17. //定义一个dummyHead, 方便处理
  18. ListNode dummyHead = new ListNode(0);
  19. dummyHead.next = head;
  20. // 初始化指针
  21. ListNode g = dummyHead;
  22. ListNode p = dummyHead.next;
  23. // 将指针移到相应的位置
  24. for(int step = 0; step < left - 1; step++) {
  25. g = g.next; p = p.next;
  26. }
  27. // 头插法插入节点
  28. for (int i = 0; i < right - left; i++) {
  29. ListNode removed = p.next;
  30. p.next = p.next.next;
  31. removed.next = g.next;
  32. g.next = removed;
  33. }
  34. return dummyHead.next;
  35. }
  36. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,155人围观)

还没有评论,来说两句吧...

相关阅读