码迷,mamicode.com
首页 > 其他好文 > 详细

算法题——翻转链表中的一段

时间:2014-08-18 23:31:53      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   strong   for   div   代码   

题目:给出一个链表中的两个指针p1和p2,将其之间的结点翻转。

 

思路:可以通过交换结点内的值来实现结点的翻转,空间为O(N);如果要求不能交换值,那么仅凭p1和p2是无法翻转的,只能交换两个指针之间的链表。

 

代码

交换值:

 1 struct ListNode 
 2 {
 3     int val;
 4     ListNode *next;
 5 };
 6 
 7 void reverseNodes(ListNode *p1, ListNode *p2) {
 8     if ( p1 == NULL || p2 == NULL ) 
 9         return;
10 
11     vector<ListNode*> nodes;
12     for(vector<ListNode*>::iterator p = p1;  ; p = p->next ) {
13         nodes.push_back(p);
14         if ( p == p2 ) 
15             break;
16     }
17 
18     int i = 0, j = nodes.size() - 1;
19     while ( i<j ) 
20         swap(nodes[i++]->val, nodes[j--]->val);
21 }

 

交换结点:

 1 void reverseNodes(ListNode *p1, ListNode *p2) {
 2     if ( p1 == NULL || p1->next == NULL ) 
 3         return;
 4 
 5     ListNode *pre = p1->next, *cur = pre->next;   //
 6 
 7     while ( cur != p2 && cur != NULL ) 
 8     {
 9         ListNode *tmp = cur->next;
10         cur->next = pre;
11         pre = cur;
12         cur = tmp;
13     }
14 
15     p1->next->next = cur;
16     p1->next = pre;
17 }

 

算法题——翻转链表中的一段,布布扣,bubuko.com

算法题——翻转链表中的一段

标签:des   style   blog   color   strong   for   div   代码   

原文地址:http://www.cnblogs.com/qieerbushejinshikelou/p/3920690.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!