当前位置:网站首页>C: 反转链表

C: 反转链表

2022-06-26 20:24:00 风静如云

反转链表经常作为面试题,看过的解答写的都不够清晰易懂。

我是这样认为的:反转链表其实就是把链表从头部依次取出,然后再加入到另一个链表:

#include <stdio.h>

struct Node{
	int data;
	struct Node *next;
};

struct Node* popFromHead(struct Node **head)
{
	if(*head != 0 )
	{
		struct Node* first = *head;
		*head = first->next;
		return first;
	}
	else
	{
		return 0;
	}
}

void pushToHead(struct Node** head, struct Node* t)
{
	t->next = *head;
	*head = t;
}

void printList(struct Node *head)
{
	while(head != 0)
	{
		printf("%d ", head->data);
		head = head->next;
	}
	printf("\n");
}

int main()
{
	struct Node *head = 0;
	struct Node n1, n2, n3;
	n1.data = 1;
	n2.data = 2;
	n3.data = 3;
	pushToHead(&head, &n3);
	pushToHead(&head, &n2);
	pushToHead(&head, &n1);
	printList(head);

	struct Node* pNode = 0;
	struct Node* reverseList = 0;

	while((pNode = popFromHead(&head)) != 0)
	{
		pushToHead(&reverseList, pNode);
	}
	printList(reverseList);
    return 0;
}

运行程序输出:
1 2 3 
3 2 1 
可见链表被反转了

原网站

版权声明
本文为[风静如云]所创,转载请带上原文链接,感谢
https://blog.csdn.net/jiemashizhen/article/details/125458679