读书人

数据结构没有啃完见到一些题请高手

发布时间: 2012-03-09 16:54:57 作者: rapoo

数据结构没有啃完,见到一些题,请高手帮忙!
(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)
Node * ReverseList(Node *head) //链表逆序
{
if ( head == NULL || head-> next == NULL )
return head;
Node *p1 = head ;//这个p1与head指向同一结点?
Node *p2 = p1-> next ;//p1-> next指向p2?
Node *p3 = p2-> next ;//p2-> next指向p3?
p1-> next = NULL ;//p1-> next为空
while ( p3 != NULL )
{
p2-> next = p1 ;//不理解
p1 = p2 ;//不理解
p2 = p3 ;//不理解
p3 = p3-> next ;//不理解
}
p2-> next = p1 ;//不理解
head = p2 ;//不理解
return head ;//不理解

谢谢 帮忙说下“?”部门和不理解部门 其实就是我都不理解。。。刚看了一遍C++ primer 数据结构没看完 希望大家不要PS

[解决办法]
都是指针,
在去复习复习指针的东西吧,不然你看数据结构肯定不行
[解决办法]
这没什么好回复的了
[解决办法]
Node * ReverseList(Node *head) //链表逆序
{

//空表判断
if ( head == NULL || head-> next == NULL )
return head;

Node *p1 = head ;//这个p1与head指向同一结点? 是的。
Node *p2 = p1-> next ;//p1-> next指向p2?准确讲,p2和 p1-> next指向了同一个节点
Node *p3 = p2-> next ;//p2-> next指向p3?准确讲,p3和 p2-> next指向了同一个节点

p1-> next = NULL ;//p1-> next为空 表示将第一个节点作为新链的尾节点

while ( p3 != NULL )
{
p2-> next = p1 ;//把p2的next指针,指向他原来的前节点,实现翻转
p1 = p2 ;//已经翻转过一个节点,p1就是新链的头指针
p2 = p3 ;//p2指向新的要翻转的节点
p3 = p3-> next ;//p3指向下一次要翻转的节点
}
p2-> next = p1 ;//此时,p2指的是原链表中的最后一个节点
head = p2 ;//有问题,函数可以直接return p2,函数结束后,入参变量head不会变化,没必要在这里赋值
return head ;

[解决办法]
这有甚么好说的呢?
回去好好看书吧
[解决办法]
Node *p1 = head ;//这个p1与head指向同一结点? 是的。
Node *p2 = p1-> next ;//p1-> next指向p2?准确讲,p2和 p1-> next指向了同一个节点
Node *p3 = p2-> next ;//p2-> next指向p3?准确讲,p3和 p2-> next指向了同一个节点

p1-> {p1-> next} p2-> {p2-> next} p3-> {p3-> next}
| |_________| |_________| |___......
|
head
***********************

p1-> next = NULL ;//p1-> next为空 表示将第一个节点作为新链的尾节点

p1{p1-> next}
| |___null
|
head
表示将第一个节点作为新链的尾节点
*******************************
然后在p3 不为空 (即链表没结束)的情况反复操作
{
p2-> next = p1 ;//把p2的next指针,指向他原来的前节点,实现翻转
p1 = p2 ;//已经翻转过一个节点,p1就是新链的头指针
p2 = p3 ;//p2指向新的要翻转的节点
p3 = p3-> next ;//p3指向下一次要翻转的节点
}


最后P3为空 P2为头节点
p3-> null
p2-> {p2-> next} p1-> {p1-> next} p1-> {p1-> next}
| |_________| |___________| |___......
|
head


新人个人理解
欢迎大家指教

读书人网 >C++

热点推荐