#include <iostream>
#include <cstdlib>
using namespace std;
const int OK = 1;
const int INFEASIBLE = -1;
const int flag = -1;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}*LinkList;
void List_TailInit(LinkList &L){
int x;
LinkList r;
L = (LinkList)malloc(sizeof(LNode));
if(cin>>x && x!=flag)
L->data = x;
r = L;
while(cin>>x && x!=flag){
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
}
r->next = NULL;
}
int DeleteAndInsertSub(LinkList &la, LinkList &lb, int i, int j, int len)
{
if(i<0 || j<0 || len<0)
return INFEASIBLE;
LinkList prev, p, q, s;
int k;
p = la;
prev = NULL;
k = 1;
while(p && k<i)
{
prev = p;
p = p->next;
k++;
}
cout << p->data << "*" << endl;
if(!p) return INFEASIBLE;
q = p;
k=1;
while(q && k<len)
{
q = q->next;
k++;
}
if(!q) return INFEASIBLE;
if(!prev) la = q->next;
else prev->next = q->next;
if(j==1)
{
q->next = lb;
lb = p;
}
else
{
s = lb;
k = 1;
while(s && k<j-1)
{
s = s->next;
k++;
}
if(!s) return INFEASIBLE;
q->next = s->next;
s->next = p;
}
return OK;
}
void PrintList(LinkList L)
{
LinkList p = L;
while(p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
LinkList la, lb;
int i, j, len;
cout << "输入la表的结点(-1结束):";
List_TailInit(la);
cout << "输入lb表的结点(-1结束):";
List_TailInit(lb);
cout << "输入i、j、len的值:";
cin >> i >> j >> len;
cout << "操作之前的la表:";
PrintList(la);
cout << "操作之前的lb表:";
PrintList(lb);
DeleteAndInsertSub(la, lb, i, j, len);
cout << "操作之后的la表:";
PrintList(la);
cout << "操作之后的lb表:";
PrintList(lb);
return 0;
}