1.试写出一个采用单链表存储的线性表A(A带表头结点 Head)的数据元素逆置的算法。
时间: 2023-06-01 19:02:06 浏览: 91
算法思路:
1. 定义三个指针:p、q、r,分别指向头结点、首元结点和尾元结点;
2. 从头结点开始遍历,将p的指针域指向q的指针域,q的指针域指向r的指针域;
3. 将r指向q,q指向p的指针域;
4. 将q指向p,p指向原来的p的指针域;
5. 重复上述步骤,直到p指向NULL,此时链表逆置完成。
算法实现:
void ReverseList(LinkList &A) {
if (A == NULL || A->next == NULL) {
return;
}
ListNode *p = A, *q = A->next, *r = q->next;
while (r != NULL) {
q->next = p;
p = q;
q = r;
r = r->next;
}
q->next = p;
A->next->next = NULL;
A->next = q;
}
注:LinkList为指向链表头结点的指针类型,ListNode为链表结点类型。
相关问题
.试写出一个采用单链表存储的线性表A(A带表头结点 Head)的数据元素逆置的算法。
可以使用三个指针,分别指向当前节点、前一个节点和后一个节点,依次遍历链表并将当前节点的 next 指针指向前一个节点,然后将三个指针向后移动一个节点,直到遍历完整个链表。具体实现如下:
void reverseList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return;
}
ListNode* prev = NULL;
ListNode* curr = head->next;
ListNode* next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head->next = prev;
}
试写出一个采用单链表存储的线性表A(A带表头结点Head)的数据元素逆置的算法。
可以使用头插法实现单链表的逆置,具体算法如下:
1. 定义三个指针变量p、q、r,分别指向头结点、第一个结点和第二个结点。
2. 将p指向头结点,q指向第一个结点,r指向第二个结点。
3. 将q的next指针指向p,即将第一个结点插入到头结点之后。
4. 将p、q、r依次向后移动一个结点,即p指向q,q指向r,r指向r的next。
5. 重复步骤3和4,直到r指向空结点,此时单链表逆置完成。
下面是具体的代码实现:
void reverseList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return;
}
ListNode* p = head;
ListNode* q = head->next;
ListNode* r = q->next;
p->next = NULL;
while (r != NULL) {
q->next = p;
p = q;
q = r;
r = r->next;
}
q->next = p;
head->next = q;
}
阅读全文