链表翻转
2014-10-27 00:17
155 查看
要求用尽可能快的方式实现链表的翻转操作。
这个我们需要用两个指针,一个指向当前的节点,一个指向当前节点的前一个节点,每一次使当前节点的指向前一个节点来实现两个节点之间的翻转,然后顺次再移动实现循环。
代码也很简单,如下所示:
这个我们需要用两个指针,一个指向当前的节点,一个指向当前节点的前一个节点,每一次使当前节点的指向前一个节点来实现两个节点之间的翻转,然后顺次再移动实现循环。
代码也很简单,如下所示:
#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; } }
相关文章推荐
- LintCode-翻转一个链表
- C++循环链表中进行元素的翻转
- 链表以k个一组进行翻转(2014美团研发笔试)
- 作业9.35:翻转链表
- 翻转链表
- lintcode 35 翻转链表
- 面试题16:翻转链表
- 逆置、翻转链表/查找单链表的倒数第k个节点/A+B不使用四则运算++ -- 等
- 程序员面试金典:翻转子串、链表中倒数第k个结点
- 链表翻转
- 数据结构:单链表(二)之链表节点排序,升序插入数据,删除指定的所有节点,翻转链表操作
- 链表的总结(链表排序、翻转、删除节点)
- 按一定间隔翻转链表
- LintCode-剑指Offer-翻转链表
- Java实现翻转单链表
- Java实现-翻转链表
- Reverse Linked List II -- 翻转部分链表
- 链表的翻转
- 翻转链表
- lintcode 中等题: reverse linked list II 翻转链表II