单链表基本操作之打印链表L中那些由P所指定的位置上的元素。

本文介绍了一种打印单链表中特定位置元素的方法,通过遍历包含目标位置的链表P,实现对链表L中对应位置元素的打印。代码示例使用C语言实现,展示了如何定义链表结构,获取链表头,并遍历两个链表进行匹配和打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表基本操作之打印链表L中那些由P所指定的位置上的元素。例如P=1,3,4,6,将L
中的第1,第3,第4,第6个元素打印出来

最近在学数据结构 有一道题目是要打印链表L中那些由P所指定的位置的元素
方法 void PrintLots(List L, List P)
例如 链表P中插入元素1,3,5,7,9
我们输出 打印链表P
在链表L中插入元素 为了避免重复 我们从10 开始
例如 链表L插入元素 10 11 12 13 14 15 16 17 18 19 20
我们输出
链表L
现在我们打印L中的第 1 3 5 7 9位的元素
L中的第 1 3 5 7 9位的元素
那么既然我们要打印L中的第几位上的元素,可以遍历链表P
如果链表P的第一个元素等于1 打印L的第一位
链表P的第2个元素等于2 打印L的第2位
链表P的第3个元素等于4 打印L的第4位
链表P的第4个元素等于7 打印L的第7位

我们就可以根据链表P的值来打印L的第几位
下面附上代码
struct Node;//结构体Node
typedef struct Node* PtrToNode;//定义新类型PtrToNode 类型名 指针 指向Node
typedef int ElementType;//定义新类型ElementType 相当于int
typedef PtrToNode List;//定义PtrToNode类型的List 链表
typedef PtrToNode Position;//定义PtrToNode类型的Position 位置
struct Node
{
ElementType Element;
Position Next;
};
Position First(List L)/获得链表头/
{
return L->Next;
}
void PrintLots(List L, List P)
{
int count = 1;/count 用来判断打印第几位/
Position Lpos, Ppos;
Lpos = First(L);/获得两个链表的头/
Lpos = First(P );
while (Lpos != NULL && Ppos != NULL)
{
if (Ppos->Element == count++)/如果链表P的值等于count/
{
printf("%d ", Lpos->Element);/打印链表L的值/
Ppos = Advance(Ppos);/链表P指针指向下一位/
}
Lpos = Advance(Lpos);/同样 链表L也要同步指向下一位/
}
}
第一次写哈哈哈 难免会有遗漏 见谅哈哈哈!!

`

以下是C语言实现的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表结点 struct ListNode { int val; struct ListNode *next; }; // 创建新结点 struct ListNode *createNode(int val) { struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode)); node->val = val; node->next = NULL; return node; } // 将新结点插入到链表尾部 void insertTail(struct ListNode **head, int val) { struct ListNode *node = createNode(val); if (*head == NULL) { *head = node; } else { struct ListNode *p = *head; while (p->next != NULL) { p = p->next; } p->next = node; } } // 打印链表 void printList(struct ListNode *head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } } // 释放链表内存 void freeList(struct ListNode **head) { struct ListNode *p = *head; while (p != NULL) { struct ListNode *temp = p; p = p->next; free(temp); } *head = NULL; } // 打印L中P指定位置元素 void printLots(struct ListNode *L, struct ListNode *P) { int i = 0; struct ListNode *p = L; while (P != NULL) { int pos = P->val; while (i < pos && p != NULL) { p = p->next; i++; } if (p != NULL) { printf("%d ", p->val); } P = P->next; } } int main() { int lenL, lenP, val; struct ListNode *headL = NULL, *headP = NULL; scanf("%d", &lenL); for (int i = 0; i < lenL; i++) { scanf("%d", &val); insertTail(&headL, val); } scanf("%d", &lenP); for (int i = 0; i < lenP; i++) { scanf("%d", &val); insertTail(&headP, val); } printLots(headL, headP); freeList(&headL); freeList(&headP); return 0; } ``` 输入格式为链表长度和链表元素,通过 `insertTail` 函数将元素插入链表,然后调用 `printLots` 函数打印L中P指定位置元素,最后释放内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值