c语言单链表的逆置
单链表的逆置
方法一:头插
void Reverse(Node* plist) {assert(plist != NULL&&plist->next!=NULL);Node* p = plist->next;Node* q;plist->next = NULL;while (p != NULL) {q = p->next;p->next = plist->next;plist->next = p;p = q;}
}
方法二: 通过三个指针不借助头节点

定义三个指针分别指向头节点后的三个元素
再将 p->next =NULL;
进行循环
使q->next = p; 改变指针指向
再将p q r 三个指针同时向后移动
直至q为NULL 再将plist (头节点)指向p 即可

void Reverse1(Node* plist) {assert(plist != NULL && plist->next != NULL);Node* p = plist->next;Node* q = p->next;Node* r;p->next = NULL;while (q != NULL) {r = q->next;q->next = p;p = q;q = r;}plist->next = p;
}
单链表的逆置 (首元素节点与尾元素节点不变其余节点逆置)
单链表逆置的变种 :
这里采用方法一
定义四个节点,z保存 头节点和首元素节点r节点保存要第二个元素节点的地址 p 和 q节点进行头插操作
完整代码
void Reverse01(ListNode* plist) { //首节点和尾节点不变//assertListNode* z = plist->next;ListNode* p = z->next;ListNode* q=NULL;ListNode* r = p;z->next = NULL;while (p->next!= NULL) {q = p->next;p->next = z->next;z->next = p;p = q;}r->next = p;}
图解
while前操作

while循环结束 (中间节点逆置完成)

最后将r指向p节点即可
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
