首页 > 代码库 > 链表翻转
链表翻转
要求用尽可能快的方式实现链表的翻转操作。
这个我们需要用两个指针,一个指向当前的节点,一个指向当前节点的前一个节点,每一次使当前节点的指向前一个节点来实现两个节点之间的翻转,然后顺次再移动实现循环。
代码也很简单,如下所示:
#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; } }
链表翻转
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。