单向链表反转
定义的结构体
typedef struct DATA {
int data;
struct DATA *next;
}DATA;
1.重新建立一个单链表,每次将原链表中的第一个结点放到新链表的后面。返回新链表。
DATA* revenge(DATA **head) {
DATA *newHead = NULL;
DATA *tmp;
if(*head == NULL) {
return NULL;
}
while(*head) {
tmp = *head;
*head = tmp->next;
tmp->next = newHead;
newHead = tmp;
}
return newHead;
}
2.通过三个指针进行反转使用first和second两个指针配合工作,使得两个节点间的指向反向,同时用third记录剩下的链表
void revengeDirectly(DATA **head) {
DATA *first;
DATA *second;
DATA *third;
if(tmp == NULL && tmp->next) {
return;
}
first = *head;
second = first->next;
first->next = NULL;
while(second) {
third = second->next;
second->next = first;
first = second;
second = third;
}
*head = first;
}
3.对于一条链表,从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,(N-1)次这样的操作结束之后将第1个节点挪到新表的表尾即可。
DATA* ReverseList(DATA *head)
{
DATA* p;
DATA* q;
p = head->next;
while(p->next!=NULL){
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
p->next=head;//相当于成环
head=p->next->next;//新head变为原head的next
p->next->next=NULL;//断掉环
return head;
}