问题描述:
给定一个链表,将其倒序排列,例如输入1->2->3->4,输出4->3->2->1。链表结点的定义如下,
struct ListNode { int val; ListNode *next; ListNode(int x): val(x), next(NULL) {} };
问题分析:
链表倒序的高效算法时间复杂度为O(n),空间复杂度为O(1)。其基本思想是将后面的结点一个个移动到前方,例如对输入 1->2->3->4 的处理步骤是 (1) 2->1->3->4 (2) 3->2->1->4 (3) 4->3->2->1
C++ 代码:
// 对(prev, next)之间的元素进行倒序排列,双开区间 ListNode *reverseList(ListNode *prev, ListNode *next) { ListNode *last = prev->next; ListNode *cur = last->next; while(cur != next) { last->next = cur->next; cur->next = prev->next; prev->next = cur; cur = last->next; } return prev->next; } // 对整个链表进行倒序排列 ListNode *reverseList(ListNode *head) { ListNode dummy(0); dummy.next = head; return reverseList(&dummy, NULL); }
原文:http://blog.csdn.net/feixia586/article/details/19285151