翻转链表1.翻转链表

返回链表反转后的头结点

需要三个变量。
如果要使cur的指向发生改变,指向它的前一个节点,就需要知道它的前一个节点,但没有指向前一个节点的指针,所以需要用pre来保存前一个节点。然后在交换之前还要用next来保存cur的下一个节点。分为三步,保存next,改变指向,迭代。

class Solution {
    public ListNode reverseList(ListNode head) {
       if(head==null){
           return null;
       }
       ListNode cur=head;
       ListNode pre=null;
       ListNode next=null;
       while(cur!=null){
           next=cur.next;
           cur.next=pre;
           pre=cur;
           cur=next;
       }
       return pre;
    }
}

返回链表m到n处反转后的链表

class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if (head == null) {
            return null;
        }
        ListNode cur = head, pre = null;
        while (m > 1) {
            pre = cur;
            cur = cur.next;
            m--;
            n--;
        }
        ListNode head1 = pre, tail = cur;
        ListNode next = null;
        while (n > 0) {
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
            n--;
        }
        if (head1 != null) {
            head1.next = pre;
        } else {
            head = pre;
        }

        tail.next = cur;
        return head;
    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页