不多比比,直接开始刷。。。
9. 分隔链表
自己没有思路,直接看答案了。跟着思路实现一下。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode[] splitListToParts(ListNode head, int k) {
//首先得到链表的长度
int length = getLength(head);
//首先判断一组分几个
int num1 = length / k;
//前边num2个是+1的
int num2 = length % k;//得到余数
//需要定义一个二维数组;
ListNode[] array = new ListNode[k];
//需要将链表中的数字添加到数组当中,可以先遍历链表,取出来值然后添加进去
ListNode curr = head;
for(int i = 0; i < k && curr != null;i++){
//前边0,1,...,num2 - 1个是需要+1的。所以需要一个判断语句
array[i] = curr;
int partSize = num1 + ( i < num2 ? 1 : 0);
for(int j = 1; j < partSize; j++){
curr = curr.next;
}//在链表的基础上进行划分,退出循环时,curr指向num1+1的节点,将后边的节点断开就可以了
ListNode next = curr.next;//存储下一个需要添加的头节点
//将curr.next指向null
curr.next = null;
curr = next;
}
return array;
}
public int getLength(ListNode head){
int length = 0;
while(head != null){
head = head.next;
length++;
}
return length;
}
}
总结:
1.到时候在遇到这种不确定时从哪个值开始,就直接赋一个具体的值就行了。不要在乱想了。
2.弄清指针类型
class Solution {
public ListNode oddEvenList(ListNode head) {
if (head == null) {
return head;
}
ListNode evenHead = head.next;
ListNode odd = head, even = evenHead;
while (even != null && even.next != null) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
}
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/odd-even-linked-list/solution/qi-ou-lian-biao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
下班!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
不着急,慢慢学,肯定能找到工作,实在不行就去小公司去磨练。积累经验。放轻松,不要有压力!!!!!!!!!大不了就去国企呗,还能咋滴呢?