题目描述
17:
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
18:
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
解题思路
这两道题都很简单,第一个题我觉得需要注意的点是该数组从1开始,直接通过n算出数组大小,然后循环数组长度即可将所有数据获得并填入到数组中;第二个题需要注意的点是链表的操作,通过一前一后两个节点进行访问,如果前一个节点p1访问到数据是所需要的数据,则将p1往下推一位,然后将后面的指针p2指向p1,即跳过中间的节点,完成节点的删除,有一种特殊情况是头节点是需要删除的节点,那么就将头节点向后移一位再直接返回就行了。
代码部分
17:
class Solution {
public int[] printNumbers(int n) {
int[] res=new int[(int)Math.pow(10,n)-1];
for(int i=0;i<res.length;i++){
res[i]=i+1;
}
return res;
}
}
18:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteNode(ListNode head, int val) {
if(head==null){
return null;
}
ListNode p1=head.next;
ListNode p2=head;
if(head.val==val){
head=head.next;
return head;
}
while(p1!=null){
if(p1.val==val){
p1=p1.next;
p2.next=p1;
}else{
p2=p2.next;
p1=p1.next;
}
}
return head;
}
}