1271 反转链表
-
描述: 反转长度为N的单链表从位置 L 到 R 的子段。请在常数空间复杂度下使用一趟扫描完成反转。
-
输入:第一行三个整数N,L,R,1<=L<=R<=N,接下来N个数表示N个节点的值
-
输出:反转后的单链表节点值
-
输入示例
5 2 4 1 2 3 4 5
-
输出示例
1 4 3 2 5
-
代码块
#include <bits/stdc++.h> using namespace std; typedef struct Node{ int data; Node *next; }LNode, *LinkList; void Reverse(LNode *&L, LNode *&R){ R->next = NULL; LNode *p = L; L = R; R = p; while(p != L){ LNode* r = p->next; p->next = L->next; L->next = p; p = r; } } int main(){ LNode *q, *l, *r, *h; int n, a, b; scanf("%d %d %d", &n, &a, &b); LinkList L = (LNode *)malloc(sizeof(LNode)); L->next = NULL; LNode *t = L; q = L; for(int i=0; i<n; i++){ int x; scanf("%d", &x); LNode *p = (LNode *)malloc(sizeof(LNode)); p->data = x; p->next = NULL; t->next = p; t = p; if(i == a-2) q = p; if(i == b-1) r = p; } l = q->next; h = r->next; Reverse(l, r); q->next = l; r->next = h; LNode *p = L->next; while(p != NULL){ printf("%d ", p->data); p = p->next; } printf("\n"); system("pause"); return 0; }