链表翻转
要求用盡可能快的方式實現鏈表的翻轉操作。
這個我們須要用兩個指針。一個指向當前的節點,一個指向當前節點的前一個節點,每一次使當前節點的指向前一個節點來實現兩個節點之間的翻轉,然后順次再移動實現循環。
代碼也非常easy,例如以下所看到的:
#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;} }轉載于:https://www.cnblogs.com/jzssuanfa/p/7230460.html
總結
- 上一篇: ES6--函数的扩展
- 下一篇: 使用scanf()函数接收带空格的字符串