24.链表操作,单链表就地逆置

来源:互联网 发布:软件防火墙厂商 编辑:程序博客网 时间:2024/05/01 06:37

链表操作,单链表就地逆置

 

#include <iostream>struct ListNode{int m_nKey;ListNode* m_pNext;ListNode();ListNode(int n);};void insert(ListNode** root,int n);ListNode* myswap(ListNode* root) ;int main(){ListNode* root=NULL;insert(&root,1);insert(&root,2);insert(&root,3);insert(&root,4);insert(&root,5);insert(&root,6);root = myswap(root);return 0;}void insert(ListNode** root,int n){ListNode* temp = new ListNode(n) ;temp->m_pNext = (*root) ;(*root) = temp ;}ListNode::ListNode(){m_pNext = NULL ;}ListNode::ListNode(int n){m_nKey = n ;m_pNext = NULL ;}ListNode* myswap(ListNode* root){ListNode* temp = root;//记录开始位置ListNode* temp2 = NULL;//用于记录左边ListNode* temp3 = NULL;//用于记录右边if (root == NULL)return root;while(temp != NULL){if (temp == root){temp3 = temp->m_pNext ;temp  = temp3;temp2 = root ;temp2->m_pNext = NULL ;}else{temp3 = temp ;temp = temp->m_pNext ;temp3->m_pNext = temp2 ;temp2 = temp3 ;}}root = temp2 ;return root;}