2个回答
展开全部
楼下说得不太对哦,使用一般参数,因为传递的是指针,所以你对链表做的更改是有效的,但是你却不能对这个指针本身做修改,但是使用引用参数的话你是可以对这个指针本身做修改的。刚好这几天做数据结构题目时就是因为一个引用导致程序出了问题,楼主可以把这段代码复制过去运行一下,第9行那里使用了引用,你可以试试把引用符号去掉看看,去掉后运行结果会让你惊讶的
#include <iostream>
#include <cstdlib>
template<typename T>
struct Node {
T data;
struct Node<T> *next;
};
template<typename T>
bool sortList(struct Node<T>*& L, bool upper) {
struct Node<T>* newHead = new struct Node<T>;
struct Node<T>* r = newHead;
struct Node<T>* p = L->next;
struct Node<T>* q;
T temp;
while (p) {
temp = p->data, q = p;
p = p->next;
while (p) {
if (upper ? temp > p->data : temp < p->data) {
temp = p->data;
q = p;
}
p = p->next;
}
for (p = L; p->next != q; p = p->next)
;
p->next = q->next; //delete smallest node from the old List
q->next = NULL;
r->next = q; //link the smallest node to a new List
r = r->next;
p = L->next;
}
delete L;
L = newHead;
return true;
}
int main(int argc, char const *argv[])
{
struct Node<int>* head = new struct Node<int>;
struct Node<int>* p = head;
int array[] = {2, 1, 5, 4, 9, 8, 6, 7, 3};
for (int i = 0; i < 9; ++i) {
p->next = new struct Node<int>;
p = p->next;
p->data = array[i];
p->next = NULL;
}
p = head->next;
while (p) {
std::cout << p->data << " ";
p = p->next;
}
sortList(head, false);
putchar('\n');
p = head->next;
while (p) {
std::cout << p->data << " ";
p = p->next;
}
return 0;
}
2016-08-05
展开全部
你传递的不就是指针,指针的作用就是用来间接修改数据的,有什么问题么?
追问
那传递指针引用区别在哪
追答
引用是C++才有的,本质上两者一样
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询