反转链表经常作为面试题,看过的解答写的都不够清晰易懂。
我是这样认为的:反转链表其实就是把链表中的节点从头部依次取出,然后再其加入到另一个链表,这个过程即完成了链表的反转。
#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, &
本文介绍了如何使用C语言清晰地反转链表,通过将链表节点依次从头部取出并加入到新的链表中,实现链表的反转。程序运行结果验证了链表成功反转。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



