首页 > 技术文章 > 单链表硬翻转

yuecmz 2020-05-09 00:18 原文

我是一个小菜鸡,却总想和大神比——迈哈特·信令
很多东西你有一个idea结果发现,800年前就有人做过了,而且比你做的更好,效率更高
题目:给你一个单链表,在不分配新的空间不创建新的头节点的情况下,将其翻转,

1->2->3
3->2->1

//这里直接放正解
//我是二重循环翻转,写完总感觉不对,因为自己写的太复杂
//总之是我想多了
//教训写代码要规范,简洁,正确,优美
#include<cstdio>
struct Node {
	int val;
	Node * next;
	Node(int v, Node* nxt) :val(v), next(nxt) {}
};
void prinls(Node* h) {
	while (h != NULL) {
		printf("%d->", h->val);
		h = h->next;
	}
	puts("END");
}
Node* reserve(Node* h) {
	Node *r, *t;
	//one node
	r = h->next;
	if (r == NULL) return h;
	//more
	h->next = NULL;
	t = r->next;
	r->next = h; 
	while (t != NULL) {
		h = r;
		r = t;
		t = t->next;
		r->next = h;
	}
	return r;
}
int main()
{
	Node *head = new Node(0, NULL);
	for (int i = 3; i > 0; i--) {
		Node * t = new Node(i,head->next);
		head->next = t;
	}
	prinls(head);
	Node *r = reserve(head);
	prinls(r);
	getchar();
	waitKey(0);
	return 0;
}

//自我介绍也肯定扣了分的
//项目经验就是0
//根本没用Linux分析过log,所以我对Linux都不行
//基础不牢地动山摇
//一定是我忘记上传证书的原因
//回去再复习复习吧

推荐阅读