include”stdio.h”
include”string.h”
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {
struct ListNode *mPriv, *priv, *mth, *tail;
struct ListNode *cur = head;
mPriv = priv = mth = NULL;
int i;
i = 1;
while (i <= m)
{
mPriv = mth;
mth = cur;
if (cur != NULL)
cur = cur->next;
i++;
}
i = 0;
tail = mth;
while (i <= (n - m))
{
mth->next = priv;
priv = mth;
mth = cur;
if (cur != NULL)
cur = cur->next;
i++;
}
if (mPriv == NULL)
head = priv;
else
mPriv->next = priv;
tail->next = mth;
return head;
}
main(void){
struct ListNode *head;
struct ListNode *new_node1, *new_node2, *new_node3, *new_node4,*new_node5;
new_node1 = (struct ListNode *)malloc(sizeof(struct ListNode));
new_node1->val = 1;
head = new_node1;
new_node2 = (struct ListNode *)malloc(sizeof(struct ListNode));
new_node2->val = 2;
new_node1->next = new_node2;
new_node3 = (struct ListNode *)malloc(sizeof(struct ListNode));
new_node3->val = 3;
new_node2->next = new_node3;
new_node4 = (struct ListNode *) malloc(sizeof(struct ListNode));
new_node4->val = 4;
new_node3->next = new_node4;
new_node5 = (struct ListNode *)malloc(sizeof(struct ListNode));
new_node5->val = 5;
new_node4->next = new_node5;
new_node5->next = NULL;
while (head != NULL)
{
printf("%d", head->val);
head = head->next;
}
reverseBetween(&new_node1, 2, 4);
while (head != NULL)
{
printf("%d", head->val);
head = head->next;
}
}