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节点即可


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部