标签:链表翻转
要求用尽可能快的方式实现链表的翻转操作。
这个我们需要用两个指针,一个指向当前的节点,一个指向当前节点的前一个节点,每一次使当前节点的指向前一个节点来实现两个节点之间的翻转,然后顺次再移动实现循环。
代码也很简单,如下所示:
#include <iostream> using namespace std; struct Node { int key; Node* next; }; Node* createList(int arr[],int nLength); Node* reverseList(Node* head); void printList(Node* head); void clearList(Node* head); void main() { int arr[] = {1,3,5,7,9}; int nLength = sizeof(arr)/sizeof(arr[0]); Node* head = createList(arr,nLength); printList(head); head = reverseList(head); printList(head); clearList(head); } Node* createList(int arr[],int nLength) { Node* head = new Node; head->key = arr[0]; head->next = NULL; Node *p = head; for(int i=1;i<nLength;i++) { Node* ptr = new Node; ptr->key = arr[i]; ptr->next = NULL; p->next = ptr; p = p->next; } return head; } Node* reverseList(Node* head) { Node* preNode = NULL; Node* pNode = head; while( pNode != NULL ) { Node* pNext = pNode->next; pNode->next = preNode; preNode = pNode; pNode = pNext; } return preNode; } void printList(Node* head) { Node* p = head; while( p!= NULL ) { cout<<p->key<<endl; p=p->next; } } void clearList(Node* head) { Node* p = head; Node* ptr; while( p!= NULL ) { ptr = p->next; delete p; p = ptr; } }
标签:链表翻转
原文地址:http://blog.csdn.net/ddupd/article/details/40487871