-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata 4.cpp
More file actions
93 lines (84 loc) · 2 KB
/
data 4.cpp
File metadata and controls
93 lines (84 loc) · 2 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
/*
设一带头结点的双向循环链表表示的线性表:
L =(a1, a2, …… , an)
请写出一个时间复杂度为O(n)的算法,将L改造为:
L =(a1, a2, ……, an-1, an, an-1, ……, a2, a1)
*/
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct DuLNode {
ElemType data; // 数据域
struct DuLNode *prior; // 指向前驱的指针域
struct DuLNode *next; // 指向后继的指针域
} DuLNode, *DuLinkList;
// 函数原型
void out_next(DuLinkList);
void out_prior(DuLinkList);
void rcopy(DuLinkList); //这是你要编写的函数
// 函数定义
void out_next(DuLinkList DHead)
{
DuLinkList p = DHead->next;
while (p != DHead)
{
printf("%d,", p->data);
p = p->next;
}
printf("\n");
}
void out_prior(DuLinkList DHead)
{
DuLinkList p = DHead->prior;
while (p != DHead)
{
printf("%d,", p->data);
p = p->prior;
}
printf("\n");
}
int main()
{
DuLinkList DHead, p;
int num;
DHead = (DuLNode*)malloc(sizeof(DuLNode));
DHead->data = -1;
DHead->prior = DHead->next = DHead; // 生成表头
scanf("%d", &num);
while (num != -1)
{
p = (DuLNode*)malloc(sizeof(DuLNode));
p->data = num;
p->next = DHead->next; // 1.链接p的next链
DHead->next = p; // 2.链接DHead的next链
p->next->prior = p; // 3.链接p的next的prior链
p->prior = DHead; // 4.链接p的prior链
scanf("%d", &num);
}
printf("Link next:"); out_next(DHead);
printf("Link prior:"); out_prior(DHead);
rcopy(DHead);
printf("NewL next:"); out_next(DHead);
printf("NewL prior:"); out_prior(DHead);
return 0;
}
/**************************************/
void rcopy(DuLinkList DHead)
{
//This function is wating for you.
DuLinkList p = DHead->next;
DuLinkList q = DHead->next;
while (p->next != p->prior) {
p = p->next;
q = q->next;
}
while (1) {
p->next = q->prior;
q = q->prior;
if (q->next == q->next->prior) break;
//q->next->prior = NULL;
}
}
/***************************************/
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */