AC语法基础学习
因为之前学习c++有一部分没学好,所以这里进行补充。
1.类与结构体
class person
{
private:
int age ,height;
double money;
public:
string name;
void say()
{
cout<<"I'm"<<name<<<endl;
}
int get_age()
{
return age;
}
}c,person[10000]; (后面一定要加分号)
类是上述的,结构体基本一样,但是struct默认public,class默认为private。
比较复杂的一般打包成class
简单的用struct
2.构造函数
struct person
{
int age,height;
double money;
person(int _age,int _height,double _money)
{
age=_age;
height=_height;
money=_money;
}
person(int_age,int _height,double _money):age(_age),height(_height),money(_money){}
};
int main()
{
person p(18,180,100.0);函数可以直接调用
return 0;
}
3.指针
可以把int* 当作一种变量,这种变量是一个指针
4.链表
算法中的一种结构
struct Node
{
int val;
Node next;///这样是不对的
Node* next;///这是对的
Node(int_val):val(_val),next(NULL){}
};
int main()
{
Node node=Node(1);
Node* p=&node;
Node(1)的意思是定义了一个node类型的变量,值为1
new Node(1)的意思是定义了一个Node类型的变量,他的返回值是这个变量的地址
p. p是普通变量
p-> p是指针
头节点一般指的是第一个节点的地址,而不是他的值
Node* head=p;
//遍历链表的方式
for(Node* i=head;i;i=i->next)
cout<val<<endl;
return 0;
}
链表的删除,并不是直接删除而是指在原链表的遍历过程中把这个点跳过去,只要在遍历的过程中遍历不到就可以了
//删除节点
head->next=head->next->next;
5.习题
这里新学到了一种遍历字符串的方法
for(auto c :str)
这个语句是将str中每一个字符复制到c中
for(auto c:str)//将str中一个一个字符一次一次复制到c中
if(c==’ ‘) res+="%20;//如果这次的c是个空格,就把新定义的字符串中加%20
else res+=c;//如果不是空格就在新定义的字符串中加上c
return res;//最后返回一整个新的字符串
class solution
{
public:
string replaceSpace(string &str)
{
string res;
for(auto c:str)
if(c==' ')
res+="%20";
else res+=c;
}
}
题目:
给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点。
假设链表一定存在,并且该节点一定不是尾节点。
数据范围
链表长度 [1,500]
。
样例
输入:链表 1->4->6->8
删掉节点:第2个节点即6(头节点为第0个节点)
输出:新链表 1->4->8
一般在单链表里删除一个节点,一般都是要知道前一个点的地址,这样让前一个节点中的next指向他的下一个点就相当于把这个点跳过去了。
这个题不太一样,只告诉了当前这个点,删除自己
方法是伪装成下一个点。
class solution
{
public:
void deleteNode(ListNode* node)
(
node->val=node->next->val;//伪装成下一个点
node->next=node->next-next;//将指向下一个节点的地址的指针也改成下一个点指向的下下个点的地址的指针
}
}