序言
学习随笔是本人对自己一天的自学回顾,由于本人是非科班出身,不懂很多cs的专业术语,所以难免会有些错误,望各位批评指正,本人定当悉心接受并立即改正。希望自己能够慢慢坚持下去,坚持转行的道路,坚持每天学习的输出。
刷题篇
LeetCode
删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例1:
输入:1 -> 1 -> 2
输出:1 -> 2
示例2:
输入:1 -> 1 -> 2 -> 3 -> 3
输出:1 -> 2 -> 3
2.大致思路
利用双指针,一个指向第一元素结点,一个指向第二元素结点,通过判断元素是否相等来移动指针位置。
若两元素相等,则第二个指针往后移动直到找到不等的元素结点,再第一个指针指向该节点,即删除了相同元素的结点。
3.出现的错误
出错均为考虑不周。
-未考虑链表为空的情况
-未考虑链表只有一个元素的情况
-未考虑最后链表连接NULL
4.第一次成功的代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode *p,*q,*t;
if(head&&head->next!=NULL){ //这个条件错了很多次
p=head;
t=p;
q=p->next;
while(q){
if(p->val!=q->val){
p->next=q;
p=p->next;
}
q=q->next;
}
p->next=q; //最后指向NULL
return t;
}
else return head;
}
5.更简练的代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode* p=head;
while(p!=NULL&&p->next!=NULL)
{
if(p->val==p->next->val)
{
p->next=p->next->next;
}
else
{
p=p->next;
}
}
return head;
}
自学Java篇
一点小语法(与C不同的地方)
1.打印
System.out.print(); //不换行打印
System.out.println(); //换行打印
2.数组
type [] arrayName = {element1, element2, element3...}; //静态初始化数组
type [] arrayName; //定义数组
arrayName = new type [] {element1, element2, element3...}; //静态初始化数组
注意静态初始化数组不能指定数组长度,只能分配元素初始值
arrayName = new type [length]; //动态初始化数组
eg:int [] prices = new int [5]; //定义与初始化同时完成
注意:不能同时使用静态初始化和动态初始化
所有数组提供了length属性,通过length可访问到数组的长度, 即 arrayName.length
3.break
break outer; 其中outer 为一个标签,用于标识一个外层循环
outer:
for(){
for(){
break outer; //这样可以直接结束外层循环
}
}