概述
1.第一题:链表调整
给定一个链表,按尾插->头插->尾插->头插的方式重新调整。比如:1->2->3->4->5,头节点为1,第一次插尾部,即把2插到1后面,第二次插头部,即把3插入到头部,依次循环/
最后的输出结果为5->3->1->2->4.
public class Solution3 {
public static void main(String[] args) {
ListNode root = new ListNode(1);
ListNode node1 = new ListNode(2);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);
ListNode node4 = new ListNode(5);
root.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
ListNode listNode = formatList(root);
System.out.println(listNode);
}
/**
* 题目:按链表顺序,一个插尾,一个插头
* 比如:1->2->3->4->5
* 结果:5->3->1->2->4
* @param root
* @return
*/
public static ListNode formatList(ListNode root){
if(root == null){
return root;
}
ListNode cur = root;
ListNode res = root;
boolean flag = false;//false插尾部,true插头部
while (cur.next != null){
if(!flag){
cur = cur.next;//插尾部,向后遍历
flag =true;
}else {
//插头部
res = cur.next;//res取到cur的下一个,此时res是不为空的
if (res.next != null){//如果res.next不为空
cur.next = res.next;//断开指向下一个
res.next = root;//res插头部
root = res;//更新头部
flag = false;//下一次插尾部
}else {
//如果res.next为空
res.next = root;//res插头部
cur.next = null;//cur.next置空,下次判断退出while循环
}
}
}
return res;
}
}
class ListNode{
private int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
@Override
public String toString() {
return "ListNode{" +
"val=" + val +
", next=" + next +
'}';
}
}
2.第二题:在一个数组中找出两个数i,j,保证i<j且array[i]+array[i]<=k,k是给定的数,两次for循环,就不写了
3.第三题:
一个数组(看成环)分成连续两个数组,求两部分差值绝对值的最小值
* 输入:[1, 2, 3, 4, 5]
* 输出 1
* 说明:[3,4] [5,1,2]
由于要求是下标连续的子数组,最后一个下标可以和第一个下标连接起来,所以直观的解法是三层for循环,外层循环每次要取的个数,第二层循环从哪个位置开始取,第三层循环将每个数相加得到当前子数组的和,再用总和减去该子数组的和,并维护一个最小值变量保存两个子数组的差的绝对值的最小值。
最后
以上就是欣喜画板为你收集整理的【0811莉莉丝】java笔试的全部内容,希望文章能够帮你解决【0811莉莉丝】java笔试所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复