7. 在一个不含头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行 。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7. 在一个不含头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行 。相关的知识,希望对你有一定的参考价值。

7. 在一个不含头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行 。
A. HL=p; p->next=HL;
B. p->next=HL; HL=p;
C. p->next=HL; p=HL;
D. p->next=HL->next; HL->next=p;

参考技术A B

新结点的next指向头结点
头结点指向p追问

能解释下吗?

追答

HL->节点2->节点3->节点4->null

HL->p->节点2->节点3->节点4->null
这样清楚了吧

追问

谢谢哦

追答

HL(节点1)->节点2->节点3->节点4->null

p->(节点1)->节点2->节点3->节点4->null

然后HL指向p
HL(p的新节点)->原节点1->原节点2->原节点3->原节点4->null

这样清楚了吧

参考技术B 选择最后一个答案D,我们刚做过的复习题

无结点单链表反转

两种方法:新建链表头插法就地反转法

 1 #include<iostream>
 2 using namespace std;
 3 
 4 
 5 struct ListNode {
 6     int val;
 7     ListNode *next;
 8     ListNode(int x) : val(x), next(NULL) {}
 9 };
10 
11 //新建链表头插法
12 ListNode* reverseList(ListNode* head) {
13     if (head == NULL)
14         return head;
15     ListNode* p=NULL;
16     ListNode* pCur = head;
17     while (pCur != NULL)
18     {
19         ListNode* newNode = new ListNode(pCur->val);
20         newNode->next = p;
21         p = newNode;
22         pCur = pCur->next;
23     }
24     return p;
25 }
26 
27 //就地反转法
28 ListNode* reverseList1(ListNode* head)
29 {
30     if (head == NULL || head->next == NULL)
31         return head;
32     ListNode* pre = head;
33     ListNode* pCur = head->next;
34     while (pCur!=NULL)
35     {
36         pre->next = pCur->next;
37         pCur->next = head;
38         head = pCur;
39         pCur = pre->next;
40     }
41     return head;
42 }
43 
44 int main()
45 {
46     ListNode* head=new ListNode(0);
47     ListNode* node1 = new ListNode(1);
48     ListNode* node2 = new ListNode(2);
49     ListNode* node3 = new ListNode(3);
50     ListNode* node4 = new ListNode(4);
51     ListNode* node5 = new ListNode(5);
52     head->next = node1;
53     node1->next = node2;
54     node2->next = node3;
55     node3->next = node4;
56     node4->next = node5;
57     node5->next = NULL;
58 
59     ListNode* pCurrent = head;
60     while (pCurrent != NULL)
61     {
62         cout << pCurrent->val << " ";
63         pCurrent = pCurrent->next;
64     }
65     cout << endl << endl;
66 
67     ListNode* node= reverseList1(head);
68 
69     ListNode* pCurrent1 = node;
70     while (pCurrent1 != NULL)
71     {
72         cout << pCurrent1->val << " ";
73         pCurrent1 = pCurrent1->next;
74     }
75     cout << endl << endl;
76 
77     return 0;
78 }

 

以上是关于7. 在一个不含头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行 。的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之单链表

数据结构之单链表

数据结构之单链表

不带头结点的单链表L,设计一个递归算法逆序输出所有结点值

[PHP] 数据结构-单链表头插法PHP实现

数据结构之单链表