标签:ota tst nbsp pre 节点 col bubuko com return
一、题目
1、审题
2、分析
给出一个链表,一个参数 k,将链表的后边 k 个节点移动到左边来。(其中 k 可能大于链表长度)
二、解答
1、思路:
①、获得链表长度 total ,同时记录末尾节点 endNode。则 k = k % total 即为需要移动的后边部分的节点数,则 leftStep = total - k 即为前边不需要动的节点数。
②、将原链表第 leftStep+1 个节点成为新链表的头结点,即 第 leftStep.next = null;
③、原末尾节点 endNode 拼接到原来的头结点。
public ListNode rotateRight(ListNode head, int k) { if(head == null || head.next == null || k == 0) // 不需要移动 return head; int total = 1; ListNode endNode = head; while(endNode.next != null) { total++; endNode = endNode.next; // 记录末尾一个节点 } k = k % total; if(k == 0) // 不需要移动 return head; int leftStep = total - k; ListNode tmpNode = head; for(int i = 1; i < leftStep; i++) tmpNode = tmpNode.next; ListNode newHead = tmpNode.next; tmpNode.next = null; // 新的末尾节点 endNode.next = head; // 拼接 return newHead; }
标签:ota tst nbsp pre 节点 col bubuko com return
原文地址:https://www.cnblogs.com/skillking/p/9675844.html