Reverse Linked List I&&II——数据结构课上的一道题(经典必做题)
2015-08-28 10:18
531 查看
Reverse Linked List I
Question SolutionReverse a singly linked list.
Reverse Linked List I
设置三个指针即可,非常简单:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { if(head==NULL || head->next == NULL){ return head; } ListNode* firstNode = head; ListNode* preCurNode = head; ListNode* curNode = head->next;//maybe null while(curNode){ preCurNode->next = curNode->next; curNode->next = firstNode; firstNode=curNode; curNode =preCurNode->next; } return firstNode; } };
Reverse Linked List II
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
1->2->3->4->5->NULL, m = 2 and n = 4,
return
1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseBetween(ListNode* head, int m, int n) { if(head==NULL||head->next==NULL||m==n) return head; ListNode* firstNode = head; ListNode* preCurNode = head; ListNode* curNode = head->next;//maybe null ListNode* lastNode= head; int flag=1; int m_flag=flag; if(m==1) { while(flag<n) { preCurNode->next = curNode->next; curNode->next = firstNode; firstNode=curNode; curNode =preCurNode->next; flag++; } return firstNode; } else { while(flag<n) { if(flag<m) { lastNode=firstNode; firstNode=firstNode->next; preCurNode =preCurNode->next; curNode =curNode->next; flag++; } else { preCurNode->next = curNode->next; curNode->next = firstNode; firstNode=curNode; curNode =preCurNode->next; lastNode->next=firstNode; flag++; } } return head; } } };
相关文章推荐
- [数据结构]字符串匹配KMP
- [数据结构]基本概念、单链表操作
- C++ 堆数据结构
- java通过LinkedList实现堆栈和队列数据结构
- python数据结构与算法——哈希表
- 学习 各个数据结构
- 学习STL map, STL set之数据结构基础
- 内存文件系统的数据结构和算法
- Java数据结构-线性表之栈的应用-递归及其应用
- Java数据结构-二叉查找树续以及平衡二叉查找树
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- 数据结构:根据有序链表构造平衡二叉树
- 实现一个拼图算法和数据结构
- 数据结构堆的实现
- 数据结构堆的实现
- 数据结构--图 的JAVA实现(上)
- 数据结构之满二叉树和完全二叉树的区别
- Nginx高级数据结构源码分析(四)-----内存池
- C#实现数据结构——线性表(下)
- 数据结构与算法分析Java版第1章练习1.1