菜鸟问题:写出在链表某个结点前面插入一个结点的程序。
大家给看看 问题点数:15、回复次数:7Top
1 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-12-20 21:31:17 得分 0
p->next = pre->next;
pre->next = p;Top
2 楼yclr(雪阳)回复于 2005-12-20 21:50:35 得分 0
根据某一个插入的数据确定插入在什么地方,例如学生基本信息,则插入某一个结点pr之前为:
while(p->next!=null)
{
if(p->next->stu_id==n)
{
q=p+1;p->next=pr;pr->next=q;
}
}
核心内容是用几个指针记住插入位置和它后面的结点,然后把过程搞清楚就好了Top
3 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-12-20 21:55:08 得分 0
需要注意特别的位置,比如说首节点 和尾节点.
中间插入是很一般的情况.
Top
4 楼f_acme(沧海一声笑)回复于 2005-12-20 22:46:57 得分 0
应该是前一个吧.
在p的前面插入一个值为data的节点:
new(s);
s->data=p->data;
s->next=p->next;
p->data=data;
p->next=s;
把当前节点后移一个.
-----------------
http://blog.csdn.net/f_acmeTop
5 楼fashionzhou(自由港)回复于 2005-12-23 09:04:33 得分 0
这是我写的,大家给看看错在哪里?
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
typedef struct node
{
int number;
struct node *next;
}slnodetype;
int Data[Max]={1,3,5,7,2,4,6,8,9,0};
slnodetype *CreateList(slnodetype *Head)
{
slnodetype *Pointer,*New;
int i;
Head=(slnodetype*)malloc(sizeof(slnodetype));
if(Head==NULL)
printf("内存分配失败!");
else
{
Head->number=Data[0];
Head->next=NULL;
Pointer=Head;
for(i=1;i<MAX;i++)
{
New=(slnodetype*)malloc(sizeof(slnodetype));
New->number=Data[i];
New->next=NULL;
Pointer->next=New;
Pointer=New;
}
}
return Head;
}
void print(slnodetype *Head)
{
slnodetype *Pointer;
Pointer=Head;
while(Pointer!=NULL)
{
printf("%d",Pointer->number);
Pointer=Pointer->next;
}
printf("\n");
}
slnodetype* insertlist(slnodetype *Head,slnodetype *New,int key)
{
slnodetype* Pointer,*prevPointer;
Pointer=Head;
int j=0;
while(1)
{
if(Pointer==NULL)
{
New->next=Head;
Head=New;
break;
}
while(Pointer!=NULL &&j<key-1)
{
Pointer=prevPointer->next;
j++;
}
if(j!=key-1)
{
printf("Error!");
}
New->number=key;
New->next=Pointer->next;
prevPointer->next=New;
break;
Pointer=Pointer->next;
}
return Head;
}
void main()
{
slnodetype* Head,*New;
int key;
Head=CreateList(Head);
if(Head!=NULL)
{
print(Head);
while(1)
{
printf("当输入'0'是循环中止\n");
New=(slnodetype*)malloc(sizeof(slnodetype));
if(New==NULL)
printf("内存分配失败!");
printf("请输入要插入的数据:");
scanf("%d",&New->number);
if(New->number==0)
break;
printf("请输入数据:");
scanf("%d",&key);
Head=insertlist(Head,New,key);
print(Head);
}
free(Head);
}
}
void free(slnodetype* Head)
{
slnodetype *Pointer;
if(Head!=NULL)
{
Pointer=Head;
Head=Head->next;
free(Pointer);
}
}
Top
6 楼xiaolingtongsw()回复于 2006-01-03 22:06:01 得分 0
nodetype *ins(nodetype *h,int i,int data)
{nodetype *p,*s;
s=(nodetype *)malloc(sizeof(nodetype));
s->data=data;
s->next=NULL;
p=find(h,i);
if(p!=NULL)
{ s->next=p->next;
p->next=s;
}
else
cout<<"输入的值不正确"<<endl;
return h;
}Top
7 楼Kid4you(Kid4you)回复于 2006-01-13 20:01:01 得分 15
#include<iostream>
using namespace std;
struct Node
{
Node *next;
int data;
};
bool InsertNode(Node *pHead, int pos, int data)
{
// find the position
Node *p = pHead;
while (pos > 1 && p)
{
p = p->next;
--pos;
}
// can't fint the position
if (pos > 1) return 0;
Node *pTmp = new Node;
pTmp->data = data;
// if the node is the head
if (pos == 0)
{
pTmp->next = pHead;
pHead->next = pTmp;
}
else
{
pTmp->next = p->next;
p->next = pTmp;
}
return 1;
}
void YourInsert(Node *&pHead, int datainsert, int data)
{
Node *p = pHead;
Node *pTmp = new Node;
pTmp->data = data;
pTmp->next = 0;
if (!p)
{
pHead = pTmp;
}
else if (!p->next && p->data != datainsert) // only head node && doesn't match
{
pHead->next = pTmp;
}
else if (p->data == datainsert) // head matches
{
pTmp->next = pHead;
pHead = pTmp;
}
else // Nodes >= 2
{
while (p->next && p->next->data != datainsert)
{
p = p->next;
}
pTmp->next = p->next;
p->next = pTmp;
}
}
void Print(Node *pHead)
{
cout << "List: " ;
while (pHead)
{
cout << pHead->data << " ";
pHead = pHead->next;
}
cout << endl;
}
void Destory(Node *pHead)
{
Node *p = pHead;
while (p)
{
p = p->next;
delete(pHead);
pHead = p;
}
}
void insert(int datainsert, int data, Node *List )
{
Node *p, *q,*s;
p = List;
q->next = p;
while(p!=NULL && p->data!=data)
{
p = p->next;
}
s = (Node *)malloc(sizeof(Node));
s->data = datainsert;
s->next = q->next;
q->next = s;
}
int main()
{
Node *pHead = 0;
int i, j;
while (cin >> i >> j)
{
if (i < 0 || j < 0)
break;
YourInsert(pHead, i, j);
Print(pHead);
}
Destory(pHead);
return 0;
}
Top




