3.2 (题目中两个链表均以升序排列)
#include<stdio.h>
#include<malloc.h>
/*假设输入都合法*/
typedef struct node
{
int data;
struct node* pNext;
}Node, * PtrNode;
PtrNode MakeList(void); //创建链表
void PrintLots(PtrNode L, PtrNode P);
int main(void)
{
/*创建链表L和P*/
PtrNode L = MakeList();
PtrNode P = MakeList();
PrintLots(L, P);
return 0;
}
PtrNode MakeList(void)
{
int Size;
printf("请输入链表的长度:");
scanf_s("%d", &Size);
PtrNode pHead = (PtrNode)malloc(sizeof(Node));//创建链表的头节点
PtrNode pTail = pHead;
pTail->pNext = NULL;
int temp;
for (int i = 0; i < Size; i++)
{
PtrNode pNew = (PtrNode)malloc(sizeof(Node));
printf("请输入链表的第%d个元素:",i+1);
scanf_s("%d", &temp);
pNew->data = temp;
pNew->pNext = NULL;
pTail->pNext = pNew;
pTail = pNew;
}
return pHead;
}
void PrintLots(PtrNode L, PtrNode P)
{
PtrNode pTemp = P->pNext;
PtrNode LTemp = L->pNext;
int count=0,pos=0;
while (pTemp != NULL)
{
pos = pTemp->data - 1;
while (count < pos)
{
LTemp = LTemp->pNext;
count++;
}
printf("%d ", LTemp->data);
pTemp = pTemp->pNext;
}
return;
}
3.3 (a)
#include<stdio.h>
#include<malloc.h>
/*假设输入都合法*/
typedef struct node
{
int data;
struct node* pNext;
}Node, * PtrNode;
PtrNode MakeList(void); //创建链表
void Swap(PtrNode pHead, int pos);//交换链表中位置为pos和pos+1的元素(pos从0开始)
void ShowList(PtrNode pHead);//输出链表中的元素
int main(void)
{
PtrNode pHead = MakeList();
ShowList(pHead);
Swap(pHead, 2);
ShowList(pHead);
return 0;
}
PtrNode MakeList(void)
{
int Size;
printf("请输入链表的长度:");
scanf_s("%d", &Size);
PtrNode pHead = (PtrNode)malloc(sizeof(Node));//创建链表L的头节点
PtrNode pTail = pHead;
pTail->pNext = NULL;
int temp;
for (int i = 0; i < Size; i++)
{
PtrNode pNew = (PtrNode)malloc(sizeof(Node));
printf("请输入链表的第%d个元素:",i+1);
scanf_s("%d", &temp);
pNew->data = temp;
pNew->pNext = NULL;
pTail->pNext = pNew;
pTail = pNew;
}
return pHead;
}
void Swap(PtrNode pHead, int pos)
{
PtrNode p = pHead->pNext;
for (int i = 1; i < pos; i++) //循环结束,p指向位置为pos-1的元素
p = p->pNext;
PtrNode pTemp1 = p->pNext; //位置为pos的元素
PtrNode pTemp2 = pTemp1->pNext->pNext;//位置为pos+2的元素
p->pNext = pTemp1->pNext;
p->pNext->pNext = pTemp1;
pTemp1->pNext = pTemp2;
return;
}
void ShowList(PtrNode pHead)
{
PtrNode p = pHead->pNext;
while (p != NULL)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
return;
}