编程题:
设有一带头结点的单链表,编程将链表颠倒过来。要求不用另外的数 组或结点完成。
分析:
该算法通过维护三个指针(prev、curr 和 next)逐步遍历单链表,实现链表的逆转。在遍历过程中,curr 的 next 指针被更新为指向 prev,逐步反转指向。最终,头结点的 next 指针指向新的头节点(即原链表的尾节点),从而完成链表的逆转。这一过程只需 (O(n)) 的时间复杂度和 (O(1)) 的空间复杂度。
#include <stdio.h>#if 0
typedef int ElemType;typedef struct Lnode {ElemType data; // 数据域struct Lnode* next; // 指针域
} Lnode, * LinkList;// 创建带头结点的单链表
LinkList createList() {LinkList head = (LinkList)malloc(sizeof(Lnode));head->next = NULL;// 这里可以添加其他节点以构造链表