struct Node{
Node * p1;
Node * p2;
int data;
};
Node * revert(Node* head);
#include<iostream>
#include<map>
using namespace std;
struct Node
{
int data;
Node* p1;
Node* p2;
Node(int d):data(d),p1(NULL),p2(NULL){}
};
Node* reverse(Node* pHead)
{
map<Node*,Node*>p2Relation;
Node* pReversedHead=NULL;
Node* pNode=pHead;
Node* pPrev=NULL;
//翻转p1
while(pNode!=NULL)
{
Node* pNext=pNode->p1;
if(pNext!=NULL)
pReversedHead=pNode;
p2Relation.insert(pair<Node*,Node*>(pNode,pNode->p2));
pNode->p1=pPrev;
pPrev=pNode;
pNode=pNext;
}
//翻转p2指针
map<Node*,Node*>::iterator it;
for(it=p2Relation.begin();it!=p2Relation.end();++it)
it->second->p2=it->first;
return pReversedHead;
} #include<iostream>
using namespace std;
typedef struct Node
{
struct Node* p1;
struct Node
*p2;
int data;
}node;
//克隆链表
node* newHead(node *head)
{
if(head ==
NULL)
{
return NULL;
}
node* p = head->p1;
while(p)
{
//创建新节点
node* newnode = (node
*)malloc(sizeof(node));
memset(newnode,'0',sizeof(node));
newnode->p1 = p->p1;
newnode->p2 = NULL;
newnode->data = p->data;
p->p1 = newnode;
p =
newnode->p1;
}
return head;
}
//复制p2指针
void
connectNodes(node* head)
{
node* pNode = head->p1;
while(pNode != NULL)
{
node* pCloned = pNode->p1;
if(pNode->p2 != NULL)
{
pCloned->p2 =
pNode->p2->p1;
}
pNode = pCloned->p1;
}
}
//带头节点的链表的反转
node* revert(node* head)
{
node* pNode =
head;
node* p = pNode->p1 ;
node *q;
pNode =
NULL;
while(p)
{
q = p->p1;
p->p1 = pNode;
pNode = p;
p = q;
}
head->p1 = pNode;
return head;
}
//反转p2指针
class Node{
Node p1,p2;
int data;
}
public class Reverse_List {
HashMap<Node, Node> hashMap = new HashMap<Node, Node>();
public void reverse(Node head){
Node pre = head;
Node cur = head.p1;
Node realTail = cur;
while(cur!=null){
Node next = cur.p1;
cur.p1 = pre;
pre = cur;
if(cur.p2!=null)
hashMap.put(cur,cur.p2);
cur = next;
}
head.p1 = pre;
realTail.p1 = null;
Set<Map.Entry<Node, Node>> entry = hashMap.entrySet();
for(Map.Entry<Node, Node> entry1:entry){
Node a = entry1.getKey();
Node b = entry1.getValue();
b.p2 = a;
}
}
}