编写函数查找带头结点单链表的倒数第四个元素
时间: 2024-05-01 13:23:48 浏览: 132
假设带头结点单链表的结构体如下:
```c
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkedList;
```
则可以编写如下的函数来查找带头结点单链表的倒数第四个元素:
```c
Node* findFourthFromEnd(LinkedList head) {
Node *p = head;
int count = 0;
while (p->next != NULL) {
count++;
p = p->next;
}
if (count < 4) {
return NULL;
}
p = head;
for (int i = 0; i < count - 3; i++) {
p = p->next;
}
return p;
}
```
该函数首先遍历整个带头结点单链表,统计链表节点数量,如果节点数量小于4,则无法找到倒数第四个元素,返回 NULL。否则,再次遍历链表,找到倒数第四个元素并返回。
相关问题
建立两个带头结点单链表
好的,以下是建立两个带头结点的单链表的示例代码(使用C语言):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结点结构体
typedef struct ListNode {
int val; // 节点的数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 创建带头结点的单链表
ListNode* createList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode)); // 创建头结点
head->next = NULL; // 初始化为空链表
return head;
}
int main() {
ListNode* list1 = createList(); // 创建第一个链表
ListNode* list2 = createList(); // 创建第二个链表
// 在这里可以插入一些代码,向链表中添加节点
return 0;
}
```
在这个示例代码中,我们首先定义了一个 `ListNode` 结构体来表示单链表的节点,其中包含了一个整型数据 `val` 和指向下一个节点的指针 `next`。然后我们定义了一个 `createList` 函数来创建带头结点的单链表,该函数返回一个指向头结点的指针。
在 `main` 函数中,我们通过调用 `createList` 函数来创建两个带头结点的单链表 `list1` 和 `list2`,然后可以在之后的代码中向链表中添加节点。
带头结点单链表就地逆置
很高兴为您解答关于带头结点单链表就地逆置的问题。带头结点单链表的就地逆置可以通过从首节点开始反转每一个节点的指向,直到链表末尾完成。这里给出一个简单实现的C++代码:
```C++
#include<iostream>
using namespace std;
class ListNode{
public:
int val;
ListNode* next;
ListNode(){}
ListNode(int x): val(x), next(NULL){}
};
ListNode* reverseList(ListNode* head){
if(head==NULL || head->next==NULL) return head;
ListNode* pre = head;
ListNode* cur = head->next;
ListNode* nxt;
pre->next = NULL;
while(cur!=NULL){
nxt = cur->next;
cur->next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
int main(){
int n;
cin>>n;
ListNode* head = new ListNode(0);
ListNode* p = head;
for(int i=0;i<n;i++){
int x; cin>>x;
ListNode* node = new ListNode(x);
p->next = node;
p = p->next;
}
head = reverseList(head);
p = head->next;
while(p!=NULL){
cout<<p->val<<" ";
p = p->next;
}
cout<<endl;
return 0;
}
```
该程序首先定义了一个ListNode类作为单链表的节点,然后定义了一个reverseList函数对带头结点的链表进行就地逆置。在main函数中,程序首先读入链表的长度n以及每个节点的值,然后通过一个循环将链表构建完成。接下来,我们对链表进行就地逆置,最后按照逆序输出每个节点的值。希望我的回答能够帮助到您,如有疑问,请随时追问。
阅读全文