单链表练习与重下AS
1.练习题:

我的代码答案:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode dummpy;
struct ListNode* tmp;
dummpy.next=NULL;//引入临时节点,用头插法,临时节点的next域为NULL
while(head){
tmp=head->next;
head->next=dummpy.next;
dummpy.next=head;
head=tmp;
}
return dummpy.next;
}
2.对前两天单链表核心操作的一个小调试。
代码:
#pragma once编译一次就ok。
不需要加载其他库。
typedef int Element_t;
//链式存储,定义节点结构
typedef struct _node {
Element_t val;
struct _node* next;
}node_t;
//定义链表头结构
typedef struct {
node_t head;
int count;
}LinkList_t;
LinkList_t* createLinkList();
int insertLinkListHeader(LinkList_t* link_table, Element_t val);
int insertLinkListPos(LinkList_t* link_table,int pos, Element_t val);
int deleteLinkList(LinkList_t* link_table, Element_t val);
void showLinkList(const LinkList_t *link_table);
包括.h文件和基本文件
#include<stdlib.h>
#include"LinkList.h"
LinkList_t* createLinkList() {
LinkList_t* table = NULL;
table=(LinkList_t*)malloc(sizeof(LinkList_t));
if (table == NULL) {
return NULL;
}
table->count = 0;
table->head.val = 0;//任意,自行约定
table->head.next = NULL;
return table;
}
//头插法,不需要再寻找插入位置的前置节点,带头节点的链表,头节点就是头插法的前置节点
int insertLinkListHeader(LinkList_t* link_table, Element_t val) {
node_t* p = &link_table->head;
node_t* new_node = (node_t*)malloc(sizeof(node_t));
if (new_node == NULL) {
return -1;
}
new_node->val = val;
new_node->next = p->next;
p->next = new_node;
link_table->count++;
return 0;
}
//在中间插入
int insertLinkListPos(LinkList_t* link_table, int pos, Element_t val) {
node_t* p = link_table->head.next;
for (int i = 0; i < pos-1; i++) {
p = p->next;
}
node_t* tmp = (node_t*)malloc(sizeof(node_t));
if (tmp == NULL) {
return -1;
}
tmp->val = val;
tmp->next = p->next;
p->next = tmp;
return 0;
}
void showLinkList(const LinkList_t* link_table) {
//辅助指针指向第一个元素,辅助指针不断向后指,直到遇到NULL
node_t* p = link_table->head.next;//指针类型等于指针类型,不应该多加“&”
printf("link list: %d\n ", link_table->count);
while (p) {
printf("%d\t", p->val);
p = p->next;
}
printf("\n");
}
int deleteLinkList(LinkList_t* link_table, Element_t val) {
// 辅助指针,指向val这个元素的前置节点
node_t* p = &link_table->head;
while (p->next) {
if (p->next->val == val) {
break;
}
p = p->next;
}
if (p->next==NULL) {
printf("Not find!\n");
return -1;
}
//删除逻辑
node_t * tmp = p->next;
p->next = tmp->next;
free(tmp);
link_table->count--;
return 0;
}
编写函数在main中进行测试,也是有.h文件,不需要.c文件。
#include "LinkList.h"
void test01(){
LinkList_t* table = createLinkList();
for (int i = 0; i < 10; i++) {
insertLinkListHeader(table, i + 100);
}
showLinkList(table);
printf("====================\n");
deleteLinkList(table, 109);
deleteLinkList(table, 104);
showLinkList(table);
printf("********************\n");
insertLinkListPos(table, 5, 6);
showLinkList(table);
}
int main() {
test01();
return 0;
}
在我编写这些代码时,node_t* p = &link_table->head.next;这一行代码出错了,在进行调试后发现。去掉&就行,指针变量p=指针变量next,不需要进行&的取址操作。
3.关于AS重新下载这件事。今天发现自己新建项目之后,项目自带的类出现了报错,显示该类不存在。应该是缺少相应的依赖。加之我之前把AS下到c盘和它的迁盘操作,索性就删除重新下载。
在第一次加载项目时,怎样能更快地build出基本项目?(用镜像网站下载)问题报错如下图。

第一步,找到项目中的gradle-wrapper.properties文件。
把文件中第三行的services.gradle.org/distributions改为mirrors.cloud.tencent.com/gradle
只修改这一部分!

第二步,找到setting.gradle.kts文件。
替换成以下代码:
pluginManagement {
repositories {
// 阿里云镜像(覆盖 Maven Central、Google、JCenter 等)
maven { setUrl("https://maven.aliyun.com/repository/public/") }
maven { setUrl("https://maven.aliyun.com/repository/google/") }
maven { setUrl("https://maven.aliyun.com/repository/jcenter/") }
maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin/") }
// 华为云镜像
maven { setUrl("https://repo.huaweicloud.com/repository/maven/") }
// 腾讯云镜像
maven { setUrl("https://mirrors.cloud.tencent.com/nexus/repository/maven-public/") }
// 网易镜像
maven { setUrl("https://mirrors.163.com/maven/repository/maven-public/") }
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
// 阿里云镜像(覆盖 Maven Central、Google、JCenter 等)
maven { setUrl("https://maven.aliyun.com/repository/public/") }
maven { setUrl("https://maven.aliyun.com/repository/google/") }
maven { setUrl("https://maven.aliyun.com/repository/jcenter/") }
maven { setUrl("https://maven.aliyun.com/repository/gradle-plugin/") }
// 华为云镜像
maven { setUrl("https://repo.huaweicloud.com/repository/maven/") }
// 腾讯云镜像
maven { setUrl("https://mirrors.cloud.tencent.com/nexus/repository/maven-public/") }
// 网易镜像
maven { setUrl("https://mirrors.163.com/maven/repository/maven-public/") }
google()
mavenCentral()
}
}
rootProject.name = "My Application3"
include(":app")
倒数第二行rootProject.name = "My Application3"这个双引号后面改为自己的项目名字就ok.
还有最后,前两天一直以为自己的AS很卡,最后发现是鼠标没电了。
浙公网安备 33010602011771号