记录两个链表操作,需要时粘贴复制
1、将链表原地逆置
链表逆置是说将一个链表变成逆序,思路是利用前插法:首先选取一个头结点,然后将其余的元素前插,最终逆序输出。代码如下,
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* reverseList(struct ListNode* head){
//逆置链表需要三个指针
//first:永远执行逆置链表的第一个元素
//p:执行原链表剩余部分的第一个元素
//temp:暂存p的下一个指针,因为p的下一个要修改为first,不存起来就找不到了
struct ListNode *first,*p,*temp;
first = head;
p = head->next;
first->next = NULL;
while(p!=NULL){
temp = p->next;
p->next = first;
first = p;
p = temp;
}
return first;
}
2、将一个数组转换为链表
struct ListNode * convert_array_to_list(int a[],int n){
int i;
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
if(n==0){
return NULL;
}
head->val = a[0];
head->next = NULL;
for(i=1;i<n;i++){
struct ListNode * temp = (struct ListNode*)malloc(sizeof(struct ListNode));
temp->val = a[i];
temp->next = head;
head = temp;
}
return head;
}