今天面试的时候反转链表写的有些问题,晚上回来整理了一下,正确的代码如下:
struct Node{
int data;
Node* next;
Node(){}
Node(int d) { data = d; next = NULL;}
};
Node* reverse(Node* begin) {
if (!begin->next)return begin;
Node* first=new Node();
first->next = begin;
Node* p = begin->next;
Node* head = begin;
while (p) {
begin->next = p->next;
p->next = head;
first->next = p;
head = p;
p = begin->next;
}
return first->next;
}
想法:
1、理解struct的定义和构造函数。
2、重要的指针:
begin——指向原链表第一个结点
first——指向新链表最开始的那个辅助结点,用来返回新链表用
head——指向first之后的那个结点,因为这个结点在迭代过程中一直会变化,所以,需要一个head指针指向它,需要再插入的时候使用
p——指向要移动的那个结点,因为每次移动的结点不同,它一直在变化,所需要一个p指针指向它。