1 问题
反转链表,比如0->1->2->3反转后变成了3->2->1->0
2 分析
搞3个指针,初始化一个指针,让头结点指向这里,然后另外一个指针初始化为NULL,然后让第一个节点指向这里,然后头结点依次向右移,这个初始化为NULL的指针也向右移动,然后最后当头结点的next指向NULL的时候,我们直接返回这个节点就行了。
3 代码实现
#include <stdio.h>typedef struct Node
{int val;struct Node *next;
} Node;/**print list*/
void print_list(Node *head)
{if (head == NULL){printf("head is NULL\n");return;}Node *p = head;while (p != NULL){printf("value is %d\n", p->val);p = p->next;}
}/**reverse list*/
struct Node* reverse(Node *head)
{if (head == NULL){printf("reverse head is NULL\n");return NULL;}Node *end = NULL;Node *p = head;Node *start = NULL;while (p != NULL){//next nodeNode *next = p->next;//If next is NULL, we will store p, we will return p in the end;if (next == NULL){end = p;} p->next = start;start = p;p = next;}return end;
}int main()
{//0->1->2->3;Node head, node1, node2, node3;head.val = 0;head.next = &node1;node1.val = 1;node1.next = &node2;node2.val = 2;node2.next = &node3;node3.val = 3;node3.next = NULL;print_list(&head);printf("list will reverse\n");Node *hello = reverse(&head);print_list(hello);return 0;
}
4 运行结果
value is 0
value is 1
value is 2
value is 3
list will reverse
value is 3
value is 2
value is 1
value is 0