试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2...,an)逆置为(an,an-1,...,a1)。
时间: 2024-05-21 09:10:10 浏览: 113
1. 顺序存储结构(数组)
算法步骤:
1. 定义两个指针变量i和j,分别指向线性表的第一个和最后一个元素;
2. 循环交换i和j指向的元素,并将i指针向后移动,j指针向前移动,直到i>=j。
C++代码实现:
void ReverseList(int a[], int n)
{
int i = 0, j = n - 1;
while (i < j)
{
swap(a[i], a[j]);
i++;
j--;
}
}
2. 链式存储结构
算法步骤:
1. 定义三个指针变量p、q和r,分别指向链表的头结点、第一个元素和第二个元素;
2. 将第一个元素的next指针指向头结点,将第二个元素的next指针指向第一个元素,将头结点的next指针指向第二个元素;
3. 将q指针向后移动,将r指针向后移动,直到r指针指向NULL为止。
C++代码实现:
void ReverseList(ListNode* head)
{
if (head == NULL || head->next == NULL)
return;
ListNode* p = head;
ListNode* q = p->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;
}
阅读全文