struct node { int data; struct node* next; }; 创建单链表的程序为: struct node* create(unsigned int n) { //创建长度为 n 的单链表 assert(n > 0); node* head; head = new node; head->next = NULL; cout > head->data; if (n == 1) { return head; } node* p = head; for (unsigned int i = 1; i < n; i++) { node* tmp = new node; tmp->next = 0; cout data; p->next = tmp; p = tmp; } return head; } 问题1:链表逆置 思想为:head 指针不断后移,指针反向即可,代码为: void reverse(node*& head) { if (head
= NULL && head->next
= NULL) { node* p = head; node* q = head->next; p->next = NULL; while (q->next
= NULL) { head = q->next; q->next = p; p = q; q = head; } head->next = p; } return; } 问题2:删除不知头结点链表的某个节点 如果单向链表不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点
思想为:把这个节点的下一个节点的值复制给该节点,然后删除下一个节点即可
问题3:怎么判断链表中是否有环
思想为:设置两个指针,一个步长为1,另一个步长为2,依次后移,如果相遇且都不为空,则有环
与这个类似的问题包括