Node* p1 p2 p3
思路:开始时,p1为NULL,p2=phead,p3=p2—>next。使p2—>next = p1,然后使p1=p2,p2=p3。如果只有1个结点则此时p2为NULL,结束循环;否则继续执行,直到p2为NULL。
注意:注意代码鲁棒性!判断头结点为NULL;如果只有一个结点。
1 #include2 using namespace std; 3 4 5 class Node 6 { 7 public: 8 Node(int v, Node* n) 9 {val = v;10 next = n;}11 ~Node(){}12 int val;13 Node* next;14 };15 Node * phead = NULL;16 Node * pReverseHead = NULL;17 18 void AddNode(int val)19 {20 Node* pnode = new Node(val,NULL);21 //Node one_node(val,NULL); 这里有大bug!如果这样写,在函数退出时自动调用析构函数!链表就乱了!22 if(phead == NULL)23 {24 phead = pnode;25 }26 else27 {28 Node* p = phead;29 while(p->next != NULL)30 {31 p = p->next;32 }33 p->next = pnode;34 }35 }36 void PrintLink()37 {38 Node* p = phead;39 while(p != NULL)40 {41 int temp = p->val;42 cout< < next;44 }45 }46 void PrintLinkReverse()47 {48 Node* p = pReverseHead;49 while(p != NULL)50 {51 int temp = p->val;52 cout< < next;54 }55 }56 Node* ReverseLink()57 {58 Node* pPrev = NULL;59 Node* pNode = phead;60 Node* pNext;61 if(phead == NULL) return NULL;62 while(pNode != NULL)63 {64 pNext = pNode->next;65 if(pNext == NULL)66 {67 pReverseHead = pNode;68 }69 70 pNode->next = pPrev;71 pPrev = pNode;72 pNode = pNext;73 74 }75 return pReverseHead;76 }77 int main()78 {79 int val;80 cin>>val;81 while(val != 0)82 {83 AddNode(val);84 cin>>val;85 }86 PrintLink();87 Node* pReverseHead = ReverseLink();88 cout<<"Reverse:"<