链表的基本操作:创建插入删除

Posted parzulpan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的基本操作:创建插入删除相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std;

//链表的定义
struct ListNode

    int val;
    ListNode* next;
    ListNode(int n) :val(n), next(nullptr) 
;

//链表的打印
void printList(ListNode* head)

    ListNode* pT = head;
    while (pT != nullptr)
    
        cout << pT->val << " ";
        pT = pT->next;
    


//链表的创建(头插法),注意打印时候倒着打印
ListNode* createListA(ListNode* head, int* arr, int len)

    ListNode* pB = head;
    for (int i = 0; i < len; ++i)
    
        ListNode* pA = new ListNode(0);    //注意:
        pA->val = arr[i];
        pA->next = pB->next;
        pB->next = pA;
    
    head = head->next;    //不要初始的头结点,否则会打印出0
    return head;


//链表的创建(尾插法)
ListNode* createListB(ListNode* head, int* arr, int len)

    ListNode* pB = head;
    for (int i = 0; i < len; ++i)
    
        ListNode* pA = new ListNode(0);    //注意:
        pA->val = arr[i];
        pB->next = pA;
        pB = pA;
    
    head = head->next;    //不要初始的头结点,否则会打印出0
    pB->next = nullptr;    //注意尾插法最后需要置空
    return head;


//链表节点的插入
void insertVarofList(ListNode* head, int pos, int val)

    int cnt = 0;
    ListNode* temp = new ListNode(val);
    while (head != nullptr)
    
        head = head->next;
        ++cnt;
        if (cnt == pos)
        
            temp->next = head->next;    //注意:顺序不能改变
            head->next = temp;
            break;
        
    


//链表节点的删除
void deleteValofList(ListNode* head, int pos)

    int cnt = 0;
    ListNode* temp = new ListNode(0);
    while (head != nullptr)
    
        head = head->next;
        ++cnt;
        if (cnt == pos)
        
            temp= head->next;    //令temp指向被删除节点
            head->next = temp->next;
            delete temp;
            break;
        
    


int main()

    int arr[] =  10,15,96,18,2,22,6,2 ;
    ListNode* head = new ListNode(0);
    ListNode* L = createListB(head, arr, 8);
    printList(L);
    cout << endl;

    insertVarofList(L, 3, 100);
    printList(L);
    cout << endl;

    deleteValofList(L, 3);
    printList(L);
    cout << endl;

    return 0;

 

以上是关于链表的基本操作:创建插入删除的主要内容,如果未能解决你的问题,请参考以下文章

头插法链表的基本操作:创建空链表,插入结点,遍历链表,求链表长度,查找结点,删除结点

链表的创建,插入,删除,输出基本操作

JavaScript单向链表的创建遍历插入删除操作

c语言 双向链表的简单操作-创建插入删除

数据结构请编程实现一个对单链表进行基本操作系统,主要包括链表的创建,查询,插入,删除,销毁等操作。

链表的基本操作(元素删除,插入,链表生成,链表倒置)