单链表插入函数

单链表插入函数,第1张

typedef int DataType

typedef struct node {

DataType data

struct node *next

}*LinkList,*pNode

/**********************************************/

/* 功能:将数据 x 插入增序表 */

/* 参数:head 链表的头结点,x待插入的结点数据 */

/**********************************************/

void InsertNode(LinkList head,DataType x) {

pNode q,p = (pNode)malloc(sizeof(struct node))// 创建新结点

p->data = x

q = head

while(q->next) {

if(x <= q->next->data) { // 插在表中,或头结点后

p->next = q->next

q->next = p

return

}

q = q->next

}

q->next = p// 插在表尾

p->next = NULL

}

//在值为val的结点前插入data

ListNode *insertList(ListNode *head, int val, int data)

{

if (head == NULL)

return NULL

ListNode *pCur = head

ListNode *insertData = (ListNode *)malloc(sizeof(ListNode))

insertData->data = data

while(pCur->next != head)

{

if(pCur->next->data == val)

{

insertData->next = pCur->next

pCur->next = insertData

return head

}

pCur = pCur->next

}

if (head->data == val) {

insertData->next = pCur->next

pCur->next = insertData

return insertData

}

free(insertData)

return NULL

}

#include<iostream>

using namespace std

class Node {

public:

    int data

    Node* next

    Node(int _data) {

        data = _data

        next = NULL

    }

}

class LinkList {

private:

    Node* head

public:

    LinkList() {

        head = NULL

    }

    void insert(Node *node, int index) {

        if (head == NULL) {

            head = node

            return

        }

        if (index == 0) {

            node->next = head

            head = node

            return

        }

        Node *current_node = head

        int count = 0

        while (current_node->next != NULL && count < index - 1) {

            current_node = current_node->next

            count++

        }

        if (count == index - 1) {

            node->next = current_node->next

            current_node->next = node

        }

    }

    void output() {

        if (head == NULL) {

            return

        }

        Node *current_node = head

        while (current_node != NULL) {

            cout << current_node->data << " "

            current_node = current_node->next

        }

        cout << endl

    }

    void delete_node(int index) {

        if (head == NULL) {

            return

        }

        Node *current_node = head

        int count = 0

        if (index == 0) {

            head = head->next

            delete current_node

            return

        }

        while (current_node->next != NULL && count < index -1) {

            current_node = current_node->next

            count++

        }

        if (count == index - 1 && current_node->next != NULL) {

            Node *delete_node = current_node->next

            current_node->next = delete_node->next

            delete delete_node

        }

    }

    void reverse(){

        if(head == NULL){

            return

        }

        

        Node *next_node,*current_node

        current_node = head->next

        head->next = NULL

        while(current_node != NULL){

            next_node = current_node->next

            current_node->next = head

            head = current_node

            current_node = next_node

            

        }

        

    }

    

}

int main() {

    LinkList linklist

    for (int i = 1 i <= 10 i++) {

        Node *node = new Node(i)

        linklist.insert(node, i - 1)

    }

    linklist.output()

    linklist.delete_node(3)

    linklist.output()

    linklist.reverse()

    linklist.output()

    return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11609545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存