#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
int data;
struct Node*next;
struct Node*prior;
}*node;
struct Node* createlist()
{
struct Node*headNode=(struct Node*)malloc(sizeof(struct Node));
headNode->next=headNode;
headNode->prior=NULL;
return headNode;
}
struct Node* createNode(int data)
{
struct Node*newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->next=NULL;
newNode->prior=NULL;
newNode->data=data;
return newNode;
}
void insertByHead(struct Node*headNode,int data)
{
struct Node*newNode=createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
void printList1(node list)
{
for(node i = list->next; i != list; i = i->next)
printf("%d ", i->data);
puts("");
}
void fun(node list)
{
node i = list;
for(node j = list->next; j != list; j = j->next, i = i->next)
j->prior = i;
list->prior = i;
}
void printList2(node list)
{
printf("%d_s_%d->\n", list->prior->data, list->next->data);
node i = list->next;
printf("s_%d_%d->\n", i->data, i->next->data);
i = i->next;
for(; i->next != list; i = i->next)
printf("%d_%d_%d->\n", i->prior->data, i->data, i->next->data);
printf("%d_%d_s", i->prior->data, i->data);
}
int main()
{
node list = createlist();
printf("输入链表的数据:\n");
int i;
while(cin >> i)
{
insertByHead(list, i);
if(cin.get() == '\n')
break;
}
printf("输入数据后链表为:\n");
printList1(list);
fun(list);
printf("s表示头节点, 改为双链表后(上一个数据_当前数据_下一个数据->):\n");
printList2(list);
return 0;
}
balabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabalabala