转C++STL语言吧,几行代码就搞定
链表的逆转,经过对很多人的代码的学习,我得出了一个目前为止我见过的最简单的算法,贴在下面:
#include
using namespace std;
struct ListNode {
int value;
ListNode *next;
// 有了c++的构造函数,我们的测试会方便很多。。。
ListNode(int v): value(v), next(NULL) {}
};
ListNode *reverseList(ListNode *head) {
// 排除无节点,或只有一个节点的情况
if (head == NULL || head->next == NULL) {
return head;
}
ListNode *prev = NULL;
ListNode *cur = head;
while(cur != NULL) {
ListNode *next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
// 打印链表
void printList(ListNode *head) {
while(head) {
cout << head->value << " -> ";
head = head->next;
}
cout << "NULL" << endl;
}
int main() {
// 我真的懒得new,所以用数组。感谢c++的构造函数和隐式类型转换!
ListNode nodes[] = {1,2,3,4,5,6,7,8,9};
int n = sizeof(nodes)/sizeof(nodes[0]);
for(int i=0; inodes[i].next = &nodes[i+1];
}
cout << "原链表:" << endl;
printList(nodes);
cout << "逆转后的链表:" << endl;
printList(reverseList(nodes));
return 0;
}
可以自己用几个栗子跟一下代码,就理解具体的做法了。