数据结构-单向链表

数据结构-单向链表

单向列表节点

typedef struct Node {
            int data;
            struct Node *next;
        } LinkNode;

单链表创建 反转链表 删除节点

//创建节点
        LinkNode *rootNode = malloc(sizeof(LinkNode));
        rootNode->data = 1;
        rootNode->next = NULL;
        
        LinkNode *node1 = malloc(sizeof(LinkNode));
        node1->data = 2;
        node1->next = NULL;
        
        LinkNode *node2 = malloc(sizeof(LinkNode));
        node2->data = 3;
        node2->next = NULL;
        
        //生成链表
        rootNode->next = node1;
        node1->next = node2;
        
        //反转链表
        LinkNode *node = reverseLink(rootNode);
        
        //删除链表中的值为3元素
        deleteLinkElement(node, 2);

反转链表

LinkNode* reverseLink(LinkNode *node){
            if (node == NULL) {return NULL;}
            LinkNode *pre = NULL;
            while (node) {
                LinkNode *nextTemp = node->next;
                node->next = pre;
                pre = node;
                node = nextTemp;
            }
            return pre;
        }

删除链表节点

LinkNode* deleteLinkElement(LinkNode *node, int element) {
            if (node == NULL) {return NULL;}
            LinkNode *pre = NULL;
            
            while (node) {
                LinkNode *nextTemp = node->next;
                if (node->data == element) {
                    if (pre) {
                        pre->next = nextTemp;
                    } else {
                        *node = *nextTemp;
                    }
                }
                pre = node;
                node = nextTemp;
            }
            return pre;
        }