61. Rotate List
2017-11-29 20:56
218 查看
原题:
即把给定链表尾部k个元素挪到链表开始。
思考过程 & 解题思路:
先遍历整个链表并存到数组便于索引。所需要做的也就是把尾部和头部连起来,再把第len - k -1个元素后面断开。同时要考虑k == 0和k == len等情况。
AC代码:
public ListNode rotateRight(ListNode head, int k) {
ArrayList<ListNode> listNodes = new ArrayList<>();
ListNode listNode = head;
while (listNode != null){//用数组存储节点,便于索引
ListNode listNode1 = listNode;
listNodes.add(listNode1);
listNode = listNode.next;
}
int len = listNodes.size();
if (len ==0 || k == 0) return head;
k %= len;//防止越界
if (k == 0) return head;
listNodes.get(len - 1).next = listNodes.get(0);//原来的尾节点指向头结点
listNodes.get(len - 1 - k).next = null;//从中间断开
return listNodes.get(len - k);//返回新的链表首部
}
即把给定链表尾部k个元素挪到链表开始。
思考过程 & 解题思路:
先遍历整个链表并存到数组便于索引。所需要做的也就是把尾部和头部连起来,再把第len - k -1个元素后面断开。同时要考虑k == 0和k == len等情况。
AC代码:
public ListNode rotateRight(ListNode head, int k) {
ArrayList<ListNode> listNodes = new ArrayList<>();
ListNode listNode = head;
while (listNode != null){//用数组存储节点,便于索引
ListNode listNode1 = listNode;
listNodes.add(listNode1);
listNode = listNode.next;
}
int len = listNodes.size();
if (len ==0 || k == 0) return head;
k %= len;//防止越界
if (k == 0) return head;
listNodes.get(len - 1).next = listNodes.get(0);//原来的尾节点指向头结点
listNodes.get(len - 1 - k).next = null;//从中间断开
return listNodes.get(len - k);//返回新的链表首部
}
相关文章推荐
- 61 Rotate List
- 61. Rotate List
- leetcode 61.Rotate List
- 61. Rotate List
- 61-Rotate list
- 【Leetcode】61. Rotate List
- leetcode - 61.Rotate List
- [Leetcode]@python 61. Rotate List
- Leetcode ☞ 61. Rotate List
- LeetCode 61: Rotate List
- leetcode-61. Rotate List
- 【leetcode每日一题】61.Rotate List
- [LeetCode61]Rotate List
- leetcode61: Rotate List
- Leetcode-61. Rotate List
- [leetcode]61. Rotate List
- 61. Rotate List
- 61. Rotate List
- Leetcode 61 Rotate List
- Leetcode 61. Rotate List