无头链表二级指针方式实现
LPNODE createNode(int data) {
LPNODE newNode = (LPNODE)malloc(sizeof(NODE));
void insertByHead(LPNODE* headNode, int data) {
LPNODE newNode = createNode(data);
newNode->next = *headNode;
void insertByTail(LPNODE* headNode, int data) {
LPNODE newNode = createNode(data);
LPNODE curNode = *headNode;
while (curNode->next != NULL) {
void insertAppoint(LPNODE* headNode, int data, int pos) {
LPNODE newNode = createNode(data);
LPNODE curNode = *headNode;
while (curNode->next != NULL && --pos) {
newNode->next = curNode->next;
void deleteByHead(LPNODE* headNode) {
printf("链表为空,没有节点可以删除!\n");
LPNODE delNode = *headNode;
*headNode = delNode->next;
void deleteByTail(LPNODE* headNode) {
printf("链表为空,没有节点可以删除!\n");
LPNODE delNode = *headNode;
LPNODE preNode = *headNode;
while (delNode->next != NULL) {
void deleteByAppointData(LPNODE* headNode, int posData) {
printf("链表为空,没有节点可以删除!\n");
if ((*headNode)->next == NULL) {
if ((*headNode)->data == posData)
LPNODE delNode = (*headNode)->next;
LPNODE preNode = *headNode;
while (delNode->next != NULL && delNode->data != posData) {
preNode->next = delNode->next;
LPNODE searchNode(LPNODE headNode, int posData) {
LPNODE curNode = headNode;
while (curNode != NULL && curNode->data != posData) {
void deleteAllPosdata(LPNODE* headNode, int posData) {
while (searchNode(*headNode, posData) != NULL) {
deleteByAppointData(headNode, posData);
void destroyList(LPNODE* headNode) {
while ((*headNode)->next != NULL) {
void printList(LPNODE headNode) {
while (headNode != NULL) {
printf("%d\t", headNode->data);
headNode = headNode->next;
insertByHead(&list, 1002);
insertByHead(&list, 1001);
for (int i = 0; i < 3; i++)
insertByTail(&list, 520 + i);
insertByTail(&list, 520 + i);
insertAppoint(&list, 1314, 2);
deleteByAppointData(&list, 1314);
deleteAllPosdata(&list, 521);