反转链表2

    题目:

    反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

    说明:
    1 ≤ m ≤ n ≤ 链表长度。

    示例:

    输入: 1->2->3->4->5->NULL, m = 2, n = 4
    输出: 1->4->3->2->5->NULL

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-linked-list-ii

static ListNode reverse(ListNode head,int m,int n){
      /*反转的前一个节点*/
        ListNode h=null;
      /*反转的第一个节点*/
      ListNode h1=null;
      /*反转末尾的后一个节点*/
        ListNode t=null;
      /*反转末尾的节点*/
      ListNode t1=null;
      /*当前节点*/
        ListNode curr=head;
        /*临时节点*/
        ListNode pre=null;
        int count=1;
        while (curr!=null){
          /*记录反转的前一个节点*/
            if(count+1==m){
              h=curr;
              curr=curr.next;
              count++;
              continue;
            }
            /*小于m的不需要反转*/
            if(count<m){
              curr=curr.next;
              count++;
              continue;
            }
            /*记录反转的第一个节点*/
            if(count==m){
              h1=curr;
            }
            /*记录反转末尾的后一个节点*/
            if(count==n+1){
              t=curr;
            }
            /*大于n的不需要反转*/
          if(count>n){
            curr=curr.next;
            count++;
            continue;
          }
          /*记录反转末尾的节点*/
            if(count==n){
              t1=curr;
            }
          count++;
            /*记录当前节点的后一个节点*/
            ListNode temp=curr.next;
            /*赋值当前节点的下一个节点是临时节点*/
            curr.next=pre;
            /*赋值临时节点为当前节点*/
            pre=curr;
            /*当前节点赋值为下一个节点,继续遍历*/
            curr=temp;
        }
        /*反转的前一个节点的下一个节点赋值为反转末尾的节点*/
        if(h!=null){
          h.next=t1;
        }
        /*反转的第一个节点的下一个节点为反转末尾的后一个节点*/
        if(h1!=null){
          h1.next=t;
        }
        /*如果m不是第一个节点则返回入参的节点*/
        if(m>1){
          return head;
        }
        /*返回第一个节点*/
        return pre==null?head:pre;
    }
View Code

 

 

@Data
    public static class ListNode{
        private int value;
        private ListNode next;

        public ListNode(int value){
            this.value=value;
        }
    }
View Code

 

posted @ 2019-10-30 14:17  有为吴  阅读(160)  评论(0编辑  收藏  举报