上面的题中,你找到了插入点并用指针P指向它,也就是到现在你只知道头指针和插入点的指针P,要在P所指向的结点之前插入元素,以前以前元素的信息都靠P来传达,所以要先修改新增结点中的信息,以使P以前的元素的信息不丢失,再来修改P的信息,可以:
1.s->next = p
2.s->prior = p->prior
3.p->prior->next = s
4.p->prior = s
//此程序实现功能不完善,因为添加,删除都是利用上一步的链表并没有处理插入位置、删除位置异常的情况,仅供参考#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data
struct LNode *next
}LNode, *LinkList//typedef用法。用LNode替换结构体类型,用LinkList替换结构体指针类型。
LinkList CreateList_L(LinkList L, int n)//返回链表的地址
{
LinkList p=NULL
L = (LinkList)malloc(sizeof(LNode))
L->next = NULL//建立头结点;
for (int i = ni>0i--)//头插法--导致输出时是倒序的;
{
p = (LinkList)malloc(sizeof(LNode))
scanf("%d", &p->data)
p->next = L->next
L->next = p
}
return L//因为是头插法,返回的L的地址就是链表的首地址;
}
void Show_L(LinkList L){
LinkList p
p = L->next
while (p){
printf("%d ", p->data)
p = p->next
}
printf("\n")
}
LinkList locate(LinkList L, int k)//返回插入位置k的地址;这个函数相当于查找,用一个值把第i个位置的数字返回出来就行;
{
LinkList p
int i = 1
p = L
while (p!=NULL&&i <k)
{
p = p->next
i++
}
if (p != NULL&&i == k)
return p
else
return 0
}
LinkList ListInsert_L(LinkList L, int i, int e)
{
LinkList s, p
p = locate(L,i)
if (p == NULL)
return 0
s = (LinkList)malloc(sizeof(LNode))
if (s == NULL)
printf("存储空间分配失败!")
else
{
s->data = e
s->next = p->next
p->next = s
}
return L
}
LinkList del(LinkList L, int i)
{
LinkList p, s
p = locate(L, i)
if (p == NULL)
return 0
else
{
s = p->next
p->next = s ->next
free(s)
}
return L
}
void main()
{
LinkList L1=NULL,L2=NULL,L3=NULL
int n,i,e
printf("你想创建的链表的长度是:")
scanf("%d", &n)
printf("请输入链表的初始值\n")
L1=CreateList_L(L1, n)
Show_L(L1)
printf("请输入插入的位置和数字\n")
scanf("%d%d", &i, &e)
L2 = ListInsert_L(L1, i, e)
Show_L(L2)
printf("请输入你想删除的位置:\n")
scanf("%d", &i)
L3 = del(L2, i)
printf("删除后的链表为:\n")
Show_L(L3)
system("pause")
声明一个结构体,该结构体包含一个值,和一个指向下一个链表的指针next!起始时,头结点指向其自身,增加一个结点时,使插入的结点的next指向头结点,使头结点的next指向插入节点。
详细代码如下:
#include <stdio.h>
#include <malloc.h>
typedef struct LNode{
int data
struct LNode *next
}LNode,*LinkList
void CreateList_L(LinkList &L,int &n)
{
char c
bool fl=true
L=(LinkList) malloc (sizeof(LNode))
L->next=NULL
LinkList p
while(fl)
{
if(scanf("%d",&c))
{
p=(LinkList) malloc (sizeof(LNode))
p->data=c
p->next=L->nextL->next=p
n++
}
else{fl=false}
}
}
void main()
{
LinkList L
int n=0
printf("请输入整型链表值,输入除整型字符外的字符退出:\n")
CreateList_L(L,n)
LinkList q
q=L
for(int i=ni>0--i)
{
q=q->next
printf("%d\n",q->data)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)