#include<iostream>
#include<cstdio>
using namespace std;
typedef struct node{
int data;
struct node *next;
}LinkNode;
LinkNode* init()
{
LinkNode *head = new LinkNode;
LinkNode *p, *q;
p = head;
int data;
while(scanf("%d", &data) != EOF && data != -1)
{
q = new LinkNode;
q->data = data;
p->next = q;
p = q;
}
p->next = NULL;
return head->next;
}
LinkNode *reverse(LinkNode *head)
{
if(head && head->next)
{
LinkNode *p1 = head;
LinkNode *p2 = head->next;
LinkNode *p3;
while(p2)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
head->next = NULL;
head = p1;
return head;
}
else{
return head;
}
}
LinkNode* reversePlus(LinkNode* head, int k)
{
if(head && head->next)
{
LinkNode *cur = head;
LinkNode *nextHead;
int count = 1;
while(cur && count < k)
{
count++;
cur = cur->next;
}
if(cur == NULL)
return head;
else{
nextHead = cur->next;
}
LinkNode *p1 = head;
LinkNode *p2 = p1->next;
LinkNode *p3;
count = 1;
while(p2 && count < k)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
count++;
}
head->next = reversePlus(nextHead, k);
head = p1;
return head;
}
else
return head;
}
void OutPut(LinkNode *head)
{
LinkNode *p = head;
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
LinkNode *newnode = init();
OutPut(newnode);
newnode = reverse(newnode);
OutPut(newnode);
newnode = reversePlus(newnode, 3);
OutPut(newnode);
return 0;
}
反转链表以及反转链表进阶备忘
最新推荐文章于 2025-07-23 14:10:46 发布