
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; } } }