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域为NULLwhile(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) {//辅助指针指向第一个元素,辅助指针不断向后指,直到遇到NULLnode_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出基本项目?
第一步,找到项目中的