L->next->prior=p;
时间: 2024-05-21 13:17:07 浏览: 17
这是双向链表中将节点p插入到节点L和节点L->next之间的操作。
假设L是链表中一个已存在的节点,L->next是L节点的后继节点,L->prior是L节点的前驱节点,p是待插入的新节点。
这个操作的实现步骤是:
1. 将p的next指针指向L的下一个节点,即p->next = L->next;
2. 将p的prior指针指向L节点,即p->prior = L;
3. 将L的next节点的prior指针指向p,即L->next->prior = p;
4. 将L的next指针指向p,即L->next = p。
这样,p就被插入到了L和L->next之间。同时,L节点的next指针指向p,p节点的prior指针指向L,原本在L后面的节点的prior指针也指向了p。这样,双向链表中的节点就被正确地连接起来了。
相关问题
Linklist Insert(Linklist &L,int i,int x) { int j; Lnode *s,*p=L if(i<0||i>LongthList(L)){ printf("插入位置错误\n"); return 0; } s=(Lnode*)malloc(sizeof(Lnode)); s->data=x; for(j=0;j<i;j++) //定位:若要在第i个元素之前插入,则j=i;(或者j=0,j<i-1;)少一次循环 { p=p->next; } //在i前插入 /* s->prior=p->peior; p->prior->next=s; s->next=p; p->prior=s; */ //在i之后 p->next->prior=s; s->next=p->next; p->next=s; s->prior=p; }
这段代码中有几个语法错误和拼写错误,可以按照下面的修改建议进行修改:
1. 第三行代码中 `Lnode *s,*p=L` 应该是 `Lnode *s,*p=L->next;`,缺少了 `->next`。
2. 第11行代码中的 `LongthList` 应该是 `LengthList`,这是一个拼写错误。
3. 第15行代码中的 `/*` 应该是 `//`,表示注释开始。
4. 第18行代码中的 `p->next->prior=s;` 应该是 `p->next->prev=s;`,`prior` 应该改为 `prev`。
5. 第19行代码中的 `s->next=p->next;` 应该是 `s->next=p->next;`,这是一个拼写错误。
修改后的代码应该是:
```
Linklist Insert(Linklist &L, int i, int x) {
int j;
Lnode *s, *p = L->next;
if (i < 0 || i > LengthList(L)) {
printf("插入位置错误\n");
return 0;
}
s = (Lnode*)malloc(sizeof(Lnode));
s->data = x;
for (j = 0; j < i; j++) { //定位:若要在第i个元素之前插入,则j=i;(或者j=0,j<i-1;)少一次循环
p = p->next;
}
//在i前插入
/*
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
*/
//在i之后
p->next->prev = s;
s->next = p->next;
p->next = s;
s->prev = p;
}
```
这段代码的作用是在带头结点的单链表 `L` 中的第 `i` 个位置插入值为 `x` 的结点。
7.下面的算法是将双链表L就地逆转,即:逆转在原链表上进行,不允许重新构造链表。请将算法补充完整。(16分) void ReserveDL(DLinkList *&L) { DLinkList *p, *r; p=L->next; (1) while ( (2) ) { r=p->next; p->next=L->next; if (L->next!=NULL) (3) ; p->prior=L; L->next=p; (4) ; } }
void ReserveDL(DLinkList *&L)
{
DLinkList *p, *r;
p = L->next;
L->next = NULL; //(1)将原链表断开,以便重新连接
while (p != NULL) //(2)循环条件是p不为NULL
{
r = p->next; //(3)保存下一个节点,以便后续操作
p->next = L->next;
if (L->next != NULL)
{
L->next->prior = p;
}
L->next = p;
p->prior = L; //(4)连接已经逆转的部分和当前节点
p = r; //继续下一个节点的操作
}
}
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)