1. 新建 project
2. 关键:项目路径下不要有中文/空格/下划线最好也不要
3. 以Debug版本编译,然后点击debug按钮即可
#include <stdio.h>
#include <stdlib.h>
typedef struct User {
int id;
struct User* pNext;
}User;
User* newLink(unsigned char linkLength);
void displayLink(User* p);
void* addElementInTheEnd(User* pHeader);
char deleteElement(User* pHeader,int id);
int main() {
#if 1
User* p = newLink(10);
displayLink(p);
addElementInTheEnd(p);
displayLink(p);
deleteElement(p,2);
displayLink(p);
#else
int* p = (int*)malloc(sizeof(int));
int a;
int* p2 = &a;
*p = 1024;
printf("%p %d\n",p,*p);
free(p2);
#endif
return 0;
}
User* newLink(unsigned char linkLength) {
int i;
User *pHeader = (User*)malloc(sizeof(User));
if (NULL == pHeader) {
return NULL;
}
pHeader->id = 101;
User* pTemp = (User*)malloc(sizeof(User));
if (NULL == pTemp) {
printf("创建失败\n");
return NULL;
}
printf("addr of pHeader:%p,pTemp:%p\n", pHeader, pTemp);
pTemp->id = 102;
pHeader->pNext = pTemp;
for (i = 0; i < linkLength; i++) {
User* pNode = (User*)malloc(sizeof(User*));
if (NULL == pNode) {
printf("创建失败\n");
return NULL;
}
pNode->id = i;
pNode->pNext = NULL;
printf("addr of pNode:%p\n",pNode);
pTemp->pNext = pNode;
pTemp = pNode;
}
printf("创建成功\n");
return pHeader;
}
void displayLink(User* p) {
printf("=============================================\n");
while (NULL != p) {
printf("id:%d,addr of user:0x%p\n",p->id,p);
p = p->pNext;
}
}
void* addElementInTheEnd(User* pHeader) {
User* pNewNode = (User*)malloc(sizeof(User));
if (NULL == pNewNode) {
return NULL;
}
while (pHeader->pNext != NULL) {
pHeader = pHeader->pNext;
}
pNewNode->id = pHeader->id + 1;
pNewNode->pNext = NULL;
pHeader->pNext = pNewNode;
return NULL;
}
char deleteElement(User* pHeader, int id) {
User* pTemp = pHeader;
User* del;
if (NULL == pHeader) {
return 0;
}
while (NULL != pTemp) {
if (id == pTemp->pNext->id) {
del = pTemp->pNext;
printf("addr of del is: %p id is:%d\n",del,del->id);
pTemp->pNext = pTemp->pNext->pNext;
printf("删除成功\n");
free(del);
del = NULL;
return 1;
}
pTemp = pTemp->pNext;
}
printf("删除失败\n");
return 0;
}