单链表的插入操作的实现

单链表的插入操作的实现

1000(ms)

65535(kb)

3011 / 15136

建立长度为n的单链表,在第i个结点之前插入数据元素data。

输入

第一行为自然数n,表示链式线性表的长度;
第二行为n个自然数表示链式线性表各元素值;
第三行为指定插入的位置i;第四行为待插入数据元素data。

输出

指定插入位置合法时候,输出插入元素后的链式线性表的所有元素,元素之间用一个空格隔开。输入不合法,输出"error!"。

样例输入

5
1 2 3 4 5
3
6

样例输出

1 2 6 3 4 5
#include <iostream>
#include <malloc.h>
#include <stdio.h>
using namespace std;
typedef struct LNode{
    int data;
    struct LNode* next;
}LinkList;
void initList(LinkList*& head){
    head = (LinkList*)malloc( sizeof(LinkList) );
    head->data = 0;
}
bool insertList(LinkList*& head, int newDate,int index){
    LinkList* newNode;
    initList(newNode);
    newNode->data = newDate;
    if(index <= 0) return false;
    LinkList* node = head;
    int i = 1;
    while(node->next != NULL && i < index){
        node = node->next;
        i++;
    }
    if(i != index) return false;
    if(node->next == NULL){
        node->next = newNode;
    }else{
        newNode->next = node->next;
        node->next = newNode;
    }
    return true;

}
void insertList(LinkList*& head,LinkList*& newNode){
    LinkList* node = head;
    while(node->next != NULL){
        node = node->next;
    }
    node->next = newNode;
}
void printList(LinkList*& head){
    if(head->next == NULL){
        return;
    }
    LinkList* node = head->next;
    while( node->next != NULL){
        printf("%d ",node->data);
        node = node->next;
    }
    printf("%d ",node->data);
}
int main(){
    LinkList* head;
    initList(head);
    int n;
    scanf("%d",&n);
    while(n--){
        int x;
        scanf("%d",&x);
        LinkList* node;
        initList(node);
        node->data = x;
        insertList(head,node);
    }
    int index,newDate;
    scanf("%d",&index);
    scanf("%d",&newDate);
    bool isSuccess = insertList(head,newDate,index);
    if(isSuccess == true){
        printList(head);
    }else{
        printf("error!");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_30092289/article/details/88392195
今日推荐