在void inverse_self();函数中将链表L就地逆置,即利用原链表的存储单元,把L={a0,a1,...,an-1}逆置为{an-1,...,a1,a0}
时间: 2024-05-27 15:14:29 浏览: 53
将一单链表逆置 操作在原链表上进行
void inverse_self() {
if (head == NULL || head->next == NULL) { // 链表为空或只有一个节点,无需逆置
return;
}
Node* p = head->next; // 第一个节点
Node* q = p->next; // 第二个节点
p->next = NULL; // 第一个节点变为最后一个节点,其next为NULL
while (q != NULL) {
Node* r = q->next; // r保存q的下一个节点
q->next = p; // 逆置
p = q; // p和q分别往后移动一个节点
q = r;
}
head->next = p; // 头节点的next指向原来的最后一个节点(现在的第一个节点)
}
阅读全文