struct Node{ int data; //数据域 Node*next; //指针域 }; 带头结点的单链表的结点结构Node声明如上,头指针为head,要把p所指结点链接到head所指结点之后的语句是( )。
时间: 2024-02-06 14:04:00 浏览: 104
可以使用以下代码将p结点插入到head结点之后:
```c++
p->next = head->next;
head->next = p;
```
首先将p的next指向head的后继结点,然后将head的next指向p即可。
相关问题
struct Node{ int data; //数据域 Node*next; //指针域 }; 带头结点的单链表的结点结构Node声明如上,头指针为head,要把p所指结点链接到head所指结点之后的语句是( )。
可以使用以下语句将p所指结点链接到head所指结点之后:
```
p->next = head->next;
head->next = p;
```
其中,首先将p的next指针指向head的next指针指向的结点,然后将head的next指针指向p,就可以完成链接操作了。
已有带头结点循环单链表存储结构定义如下: typedef struct node{ /*结点类型定义*/ DataType data; /结点的数据域*/ struct node *next; /*结点的指针域*/ }ListNode, *LinkList; 设计一个算法,将首元结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。 LinkList Demo(LinkList L) { //L为带头结点的单链表
以下是算法实现:
LinkList Demo(LinkList L) {
if (L == NULL || L->next == NULL) {
return L;
}
ListNode *p = L->next;
ListNode *q = p->next;
while (q->next != L) {
q = q->next;
}
q->next = p;
L->next = q;
p->next = NULL;
return L->next;
}
解释一下算法的思路:
首先判断链表是否为空或只有一个结点,如果是,直接返回原链表头指针。
定义两个指针 p 和 q,分别指向原链表的第一个和第二个结点。
遍历链表,找到终端结点 q。
将终端结点 q 的 next 指针指向首元结点 p。
将头结点 L 的 next 指针指向终端结点 q。
将首元结点 p 的 next 指针置为 NULL。
返回新链表的头指针 L->next。
注意:这个算法只适用于带头结点的循环单链表。如果是普通的单链表,需要先将尾结点找到,然后再进行操作。
阅读全文