链表操作,单链表就地逆置
#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;
}