指针链表求调
  • 板块题目总版
  • 楼主dalu
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/24 17:54
  • 上次更新2024/12/24 21:46:25
查看原帖
指针链表求调
1416993
dalu楼主2024/12/24 17:54
#include <iostream>
using namespace std;

struct node{
    int val;
    node *nxt = nullptr;
    node *pre = nullptr;
};

node *head = nullptr,*tall = nullptr;
int k;

void ins(int n,int x){
    node *now;
    now = new node;
    now->val = x;
    if(head == nullptr && tall == nullptr){
        head = now;
        tall = now;
        return;
    }
    node *p1 = head;
    for(int i = 1;i <= n;i++) p1 = p1->nxt;
    node *p2 = p1->nxt;
    p1->nxt = now;
    p2->pre = now;
    now->nxt = p2;
    now->pre = p1;
    if(n == k) tall = now;
    if(n == 0) head = now;
    k++;
}

void del(int n){
    if(n == 1){
        node *p = head;
        head = head->nxt;
        head->nxt->pre = head;
        delete p;
        k--;
        return;
    }
    node *p1,*p2,*p3;
    for(int i = 1;i < n;i++) p1 = p1->nxt;
    p3 = p1->nxt;
    if(n == k){
        tall = p1;
        delete p3;
        k--;
        return;
    }
    p2 = p1->nxt->nxt;
    delete p3;
    p1->nxt = p2;
    p2->pre = p1;
    k--;
}

int find(int n){
    node *p = head;
    if(n == k) return 0;
    for(int i = 1;i <= n;i++) p = p->nxt;
    return p->val;
}

int main(){
    char ch;
    int n,x;
    while(cin >> ch){
        if(ch == 'i') cin >> n >> x,ins(n,x);
        if(ch == 'd') cin >> n,del(n);
        if(ch == 'f') cin >> n,cout << find(n) << ' ';
    }
    return 0;
}
2024/12/24 17:54
加载中...