/******************************************************************
反转链表
*******************************************************************/
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* init(int val){
struct ListNode* head = malloc(sizeof(struct ListNode));
head->next = NULL;
head->val = val;
return head;
}
void insert(struct ListNode* head, int val){
struct ListNode* p = head;
while(p->next){
p = p->next;
}
struct ListNode* node = malloc(sizeof(struct ListNode));
node->next = NULL;
node->val = val;
p->next = node;
}
void print(struct ListNode* head){
struct ListNode* p = head;
while(p){
printf("%d ", p->val);
p = p->next;
}
}
struct ListNode* reverseList(struct ListNode* head){
if (head == NULL){
return head;
}
struct ListNode* p = head;
struct ListNode* pre = head;
if (pre->next== NULL){
return pre;
}
struct ListNode* cur = pre->next;
if (cur->next == NULL){
cur->next = pre;
pre->next = NULL;
return cur;
}
struct ListNode* next = cur->next;
pre->next = NULL;
cur->next = pre;
while(next->next){
pre = cur;
cur = next;
next = next->next;
cur->next = pre;
}
next->next = cur;
return next;
}
int main()
{
struct ListNode* head = init(1);
insert(head,2);
insert(head,3);
insert(head,4);
insert(head,5);
insert(head,6);
insert(head,7);
insert(head,8);
insert(head,9);
insert(head,10);
print(head);
printf("\n");
struct ListNode* re = reverseList(head);
print(re);
return 0;
}
C语言, 反转链表,直接反转
最新推荐文章于 2024-07-25 15:54:48 发布