链表的逆序输出--头插法

头插法

struct ListNode *createlist()
{
	struct ListNode *head = NULL, *newNode = NULL;
	int a;
	
	while(1)
	{
		scanf("%d", &a);
		if(a == -1){
			return head;
		}else{
			newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
			newNode->data = a;
			newNode->next = head;
			head = newNode;
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于创建链表的问题。我来解答一下。 首先,是指在链表入新节点,新节点成为链表的新部。这种方可以方便地实现链表,并且时间复杂度为 O(n)。 下面是使用创建链表的代码: ``` #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node* next; } Node; Node* createList() { Node* head = NULL; Node* p = NULL; int n, i, x; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &x); p = (Node*)malloc(sizeof(Node)); p->data = x; p->next = head; head = p; } return head; } void printList(Node* head) { Node* p = head; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } void reverseList(Node** head) { Node* prev = NULL; Node* curr = *head; Node* next = NULL; while (curr != NULL) { next = curr->next; curr->next = prev; prev = curr; curr = next; } *head = prev; } int main() { Node* head = createList(); printList(head); reverseList(&head); printList(head); return 0; } ``` 在 createList 函数中,先读入链表的长度 n,然后依次读入每个节点的值 x,创建新节点并将其入到链表部,最后返回链表指针。 在 reverseList 函数中,使用三个指针 prev、curr 和 next 分别表示当前节点的前一个节点、当前节点和当前节点的后一个节点,依次将当前节点的 next 指针指向前一个节点,然后将 prev、curr 和 next 分别向后移动一位,直到 curr 指向链表的最后一个节点为止。最后将 head 指针指向 prev,完成链表。 最后在主函数中,先打印原始链表,然后调用 reverseList 函数链表,最后再打印后的链表

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值