2-8 单链表逆置
分数 3
作者 段华琼
单位 成都锦城学院
将单链表倒置,要求只利用原表的存储空间。
原单链表如下所示:
倒置后的单链表应为:

输入格式:
第一行输入n的值,表示单链表的元素个数。
第二行输入n个整数值,作为单链表的各元素值。
输出格式:
输出倒置后的单链表的各元素值,各元素值之间用空格分隔。
输入样例1:
4
2 4 6 8
输出样例1:
8 6 4 2
输入样例2:
7
1 3 5 7 9 11 13
输出样例2:
13 11 9 7 5 3 1
第二次碰到这个单链表的逆置,但是是第一次自己手敲出来,第一次完全不知道咋做,用到了三指针法:PTA(链表)1-2 单链表逆转 | zhangzhang-blog
答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| #include<iostream> using namespace std;
typedef struct LNode { int data; struct LNode *next; } LNode, *LinkList;
void initList(LinkList &L) { L = new LNode; L->next = NULL; }
void insertAtTail(LinkList &tail, int num) { LinkList newNode = new LNode; newNode->data = num; newNode->next = NULL; tail->next = newNode; tail = newNode; }
void reverseList(LinkList &L) { LinkList prev = NULL; LinkList curr = L->next; LinkList next = NULL; while (curr != NULL) { next = curr->next; curr->next = prev; prev = curr; curr = next; } L->next = prev; }
void printList(LinkList L) { LinkList p = L->next; while (p != NULL) { cout << p->data << " "; p = p->next; } }
int main() { LinkList L; initList(L);
int n; cin >> n; int num; LinkList tail = L; for (int i = 0; i < n; ++i) { cin >> num; insertAtTail(tail, num); }
reverseList(L); printList(L); }
|