数据结构——第二章线性表·2009真题

MiracleWolf 2024-2-11 78 2/11

一、问题描述

数据结构——第二章线性表·2009真题

二、算法步骤

首先遍历一次链表,获取链表长度n,然后判断k值的合法性,接着遍历链表n-k次,输出最后的值即可。还可以定义两个指针pq,从链表第一个节点开始,先让p开始走,走到k位置后,q开始走,当p走到末尾时,q的位置就是答案。因为p走到末尾时,q走了n-k步。
遍历两次代码及答案:

#include 
#include 
#include
using namespace std;
typedef struct Node
{
    int data;
    struct Node* link;
}Node,LinkList;

Node* Init(LinkList* L)
{
    L = (LinkList*)malloc(sizeof(Node));
    L->data = 0;
    L->link = NULL;
    return L;
}
Node* Create(int x)
{
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = x;
    newNode->link = NULL;
    return newNode;
}
void Print(LinkList* L)
{
    Node* cur = L;
    cur = cur->link;
    while (cur!= NULL)
    {
        printf("%d",cur->data);
        if(cur->link!=NULL)printf("->");
        cur = cur->link;
    }
    printf("\n");
}
int main()
{
    /// 
    ///链表初始化
    /// 
    /// 
    LinkList* L = NULL;
    L = Init(L);
    int n; cin >> n;
    Node* cur = L;
    for (int i = 0; i < n; i++)
    {
        int x; cin >> x;
        Node* newNode = Create(x);
        cur->link = newNode;
        cur = cur->link;
    }
    Print(L);

    /// 
    /// 解法步骤
    /// 
    /// 
    int k; cin >> k;
    int count = 0;
    /*扫描两次*/
    cur = L;
    cur = cur->link;//获取链表第一个节点
    while (cur != NULL)
    {
        count++;
        cur = cur->link;
    }
    cur = L->link;
    if (k > count) { cout << -1 << endl; }//判断合法性
    if (k < 1) { cout << -1 << endl; }
    for (int j = 0; cur != NULL; cur = cur->link,j++)
    {
        if (j == n - k) { cout << cur->data; break; }
    }

    return 0;
}

5
1 2 3 4 5
1->2->3->4->5
3
3

遍历一次代码:
```cpp
/// <summary>
/// 解法步骤
/// </summary>
/// <returns></returns>
int k; cin >> k;
Node<em> p = L->link, </em>q = L->link;//p,q指向第一个节点
int ans = -1; int j = 0;
while (p!= NULL)
{
if (j == k) { q = q->link; }
else { j++; }
p = p->link;
}
if (j==k) //判断合法性
{
ans = q->data;
}
cout << ans;</p>
<pre><code> 结果
```cpp
5
1 2 3 4 5
1->2->3->4->5
5
1

三、总结
本题满分15分,多次遍历最多10分,一次遍历15分。可以使用双指针的做法实现一次遍历,在链表的题目里面,双指针场景很多,一定要掌握。

- THE END -

MiracleWolf

2月11日16:15

最后修改:2024年2月11日
0

非特殊说明,本博所有文章均为博主原创。