澈: 编程实现单向链表的基本操作: 1.插入元素 2.删除元素 3.获取第i个结点的数据元素 4.判断元素是否存在-----前面4个已提 澈: 5.获取某个元素的下一个元素;NextElem(L, cur_e, &next_e);
时间: 2023-05-26 07:04:11 浏览: 147
next_e)
其中,L为链表,cur_e为当前元素,next_e为下一个元素。具体实现如下:
struct Node {
int data;
Node* next;
};
// 获取某个元素的下一个元素
bool NextElem(Node* L, int cur_e, int& next_e) {
if (L == nullptr || L->next == nullptr)
return false;
while (L->next != nullptr && L->data != cur_e) {
L = L->next;
}
if (L->next != nullptr) {
next_e = L->next->data;
return true;
}
return false;
}
其中,首先判断链表是否为空或只有一个元素,如果是则返回false。然后从头结点开始遍历链表,直到找到当前元素为止(如果没有找到则返回false),最后将当前元素的下一个元素传递给next_e返回true。
相关问题
编程实现单向链表的基本操作: 1.插入元素 2.删除元素 3.获取第i个结点的数据元素 4.判断元素是否存在 5.获取某个元素的下一个元素;
C++代码实现单向链表的基本操作:
```c++
#include<iostream>
using namespace std;
struct ListNode{
int data;
ListNode *next;
};
// 插入元素
ListNode* insert(ListNode* head, int newData){
ListNode *newNode = new ListNode;
newNode->data = newData;
newNode->next = NULL;
if(head==NULL){
head = newNode;
}
else{
ListNode *p = head;
while(p->next!=NULL){
p = p->next;
}
p->next = newNode;
}
return head;
}
// 删除元素
ListNode* remove(ListNode* head, int key){
if(head==NULL){
return NULL;
}
else if(head->data == key){
ListNode *temp = head;
head = head->next;
delete temp;
}
else{
ListNode *p = head;
while(p->next!=NULL && p->next->data!=key){
p = p->next;
}
if(p->next!=NULL){
ListNode *temp = p->next;
p->next = temp->next;
delete temp;
}
}
return head;
}
// 获取第i个结点的数据元素
int getElement(ListNode* head, int i){
int count = 0;
ListNode *p = head;
while(p!=NULL && count<i){
p = p->next;
count++;
}
if(p!=NULL){
return p->data;
}
else{
return -1; // 若不存在第i个结点,返回-1
}
}
// 判断元素是否存在
bool contains(ListNode* head, int key){
ListNode *p = head;
while(p!=NULL && p->data!=key){
p = p->next;
}
if(p!=NULL){
return true;
}
else{
return false;
}
}
// 获取某个元素的下一个元素
int getNextElement(ListNode* head, int key){
ListNode *p = head;
while(p!=NULL && p->data!=key){
p = p->next;
}
if(p!=NULL && p->next!=NULL){
return p->next->data;
}
else{
return -1; // 若key不存在或key是最后一个结点,返回-1
}
}
int main(){
ListNode *head = NULL;
head = insert(head, 1);
head = insert(head, 3);
head = insert(head, 5);
head = insert(head, 7);
cout<<"链表的元素为:";
ListNode *p = head;
while(p!=NULL){
cout<<p->data<<" ";
p = p->next;
}
head = remove(head, 3);
cout<<"\n删除元素3后,链表的元素为:";
p = head;
while(p!=NULL){
cout<<p->data<<" ";
p = p->next;
}
int element = getElement(head, 2);
cout<<"\n获取第2个结点的元素为:"<<element<<endl;
bool flag = contains(head, 5);
cout<<"是否存在元素5:"<<flag<<endl;
int nextElement = getNextElement(head, 7);
cout<<"元素7的下一个元素为:"<<nextElement<<endl;
return 0;
}
```
输出结果:
```
链表的元素为:1 3 5 7
删除元素3后,链表的元素为:1 5 7
获取第2个结点的元素为:5
是否存在元素5:1
元素7的下一个元素为:-1
```
编程实现单向链表的基本操作: 1.插入元素 2.删除元素 3.获取第i个结点的数据元素 4.判断元素是否存在-----前面4个已提供源码参考 5.获取某个元素的下一个元素
单向链表的基本操作包括插入元素、删除元素、获取第i个结点的数据元素、判断元素是否存在和获取某个元素的下一个元素。下面是对这些操作的实现。
1. 插入元素
单向链表的插入操作需要先找到插入位置的前一个结点,然后在这个结点后面插入新结点。具体实现如下:
```
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class LinkedList:
def __init__(self):
self.head = ListNode()
def insert(self, val, index):
node = ListNode(val)
cur = self.head
for i in range(index):
cur = cur.next
if cur is None:
return False
node.next = cur.next
cur.next = node
return True
```
2. 删除元素
单向链表的删除操作需要先找到要删除的结点的前一个结点,然后将这个结点的next指针指向下一个结点,从而实现删除。具体实现如下:
```
class LinkedList:
def __init__(self):
self.head = ListNode()
def delete(self, index):
cur = self.head
for i in range(index):
cur = cur.next
if cur is None:
return False
cur.next = cur.next.next
return True
```
3. 获取第i个结点的数据元素
单向链表的获取操作需要先找到第i个结点,然后返回它的值。具体实现如下:
```
class LinkedList:
def __init__(self):
self.head = ListNode()
def get(self, index):
cur = self.head.next
for i in range(index):
cur = cur.next
if cur is None:
return None
return cur.val
```
4. 判断元素是否存在
单向链表的查找操作需要遍历整个链表,查找是否存在指定的元素。具体实现如下:
```
class LinkedList:
def __init__(self):
self.head = ListNode()
def find(self, val):
cur = self.head.next
while cur is not None:
if cur.val == val:
return True
cur = cur.next
return False
```
5. 获取某个元素的下一个元素
单向链表的获取操作需要先找到指定元素所在的结点,然后返回它的下一个结点的值。具体实现如下:
```
class LinkedList:
def __init__(self):
self.head = ListNode()
def get_next(self, val):
cur = self.head.next
while cur is not None:
if cur.val == val:
return cur.next.val if cur.next is not None else None
cur = cur.next
return None
```
阅读全文