单链表的插入操作的实现
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;
}