链表(结点插入删除创造输出)

结点的创造,插入,删除,输出函数,以及主函数打印示例

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Node {
	int data;
	struct Node* next;
};
Node* getnewNode(int val) {
	Node* p = (Node*)malloc(sizeof(Node));
	p->data = val;
	p->next = NULL;
	return p;
};
 
Node* insert(Node* head, int pos, int val) {
	if (pos == 0) {
		Node* p = getnewNode(val);
		p->next = head;
		return p;
	}
	Node* p = head;
	for (int i = 1; i < pos; i++) p = p->next;
	Node* node = getnewNode(val);
	node->next = p->next;
	p->next = node;
	return head;
 
}
void clear(Node* head) {
	if (head == NULL) return;
	for (Node* p = head, *q; p; p = q) {
		q = p->next;
		free(p);
	}
	return;
}
void output_linklist(Node* head) {
	int n = 0;
	for (Node* p = head; p; p = p->next) n += 1;
	for (int i = 0; i < n; i++) {
		printf("%3d", i);
		printf("  ");
	}
	printf("\n");
	for (Node* p = head; p; p = p->next) {
		printf("%3d", p->data);
		printf("->");
	}
		printf("\n\n");
}
int find(Node*head,int val){
	int n=0;
	for(Node*p=head;p;p=p->next){
		if(p->data==val){
			output_linklist(head);
			for(int i=0;i<n*5;i++) printf(" ");
			printf("  ^");
			printf("\n");
			return 1;
		}
		n=n+1;
		
	}
	return 0;
} 
int main() {
	srand(time(0));
#define MAX_OP 7
	Node* head = NULL;
	for (int i = 0; i < MAX_OP; i++) {
		int pos = rand() % (i + 1), val = rand() % 100;
		printf("insert %d at %d to linked\n", val, pos);
		head = insert(head, pos, val);
		output_linklist(head);
		if(!find(head,val)){
			printf("Not Found");
		}
	}
	
	return 0;
}

运行结果

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Python 代码实现双向链表中的插入操作,并输出整个链表: ```python class Node: def __init__(self, data=None): self.data = data self.prev = None self.next = None class DoublyLinkedList: def __init__(self): self.head = None def insert_at_beginning(self, data): new_node = Node(data) if self.head is None: self.head = new_node else: new_node.next = self.head self.head.prev = new_node self.head = new_node def insert_at_end(self, data): new_node = Node(data) if self.head is None: self.head = new_node else: current = self.head while current.next: current = current.next current.next = new_node new_node.prev = current def insert_after_node(self, node, data): new_node = Node(data) if node.next is None: node.next = new_node new_node.prev = node else: node.next.prev = new_node new_node.next = node.next node.next = new_node new_node.prev = node def insert_before_node(self, node, data): new_node = Node(data) if node.prev is None: self.head = new_node new_node.next = node node.prev = new_node else: node.prev.next = new_node new_node.prev = node.prev new_node.next = node node.prev = new_node def print_list(self): current = self.head while current: print(current.data, end=" ") current = current.next print() # 测试 dllist = DoublyLinkedList() dllist.insert_at_beginning(5) dllist.insert_at_beginning(4) dllist.insert_at_end(6) dllist.insert_after_node(dllist.head, 7) dllist.insert_before_node(dllist.head.next.next, 8) dllist.print_list() # 4 5 8 7 6 ``` 这里定义了一个 `Node` 类作为链表结点原型,包含数据域 `data`、前驱指针 `prev` 和后继指针 `next`。 然后定义了 `DoublyLinkedList` 类,它有一个头指针 `head` 用于指向双向链表的第一个结点。该类中包含了插入操作的四个方法: - `insert_at_beginning`:在链表开头插入结点。 - `insert_at_end`:在链表末尾插入结点。 - `insert_after_node`:在指定结点插入结点。 - `insert_before_node`:在指定结点插入结点。 这里选择 Python 语言实现,因为 Python 的语法简约,显得清晰明了。实际上,双向链表插入操作各种语言实现差异并不大。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值