摘要:(1)求并操作,首先还是要考虑到特殊情况,即某个链表已经走到终点或者某个链表本身就是空的。这样只要找到非空链表的未处理部分,然后将它接在新链表后面就可以了。其次,考虑一般情况,当两个链表都不是空的时候,就比较它们的大小,相同就放入一个,不同就两个都都放入新的链表。同时注意大小放入的先后顺序,这样可以保持有序放入(如果P,L本身有序的话,当然在没有要求时也可以不排序)
(2)反转一个链表:从表头的下一个节点开始,定义变量Current、
,Previous,Next。其中Current代表现在要处理的节点。将Current的next指针指向Previous(current的前一个节点),然后依次将current赋值previous,Next(current的下一个)赋值Current,Next->next赋值Next,继续该操作,直到Next为空。最后将L(表头)指向最后的current,完成反转.
List SUM(List L, List P)
{
int big,small;
List Non_NULL;
List Temp;
List Mix_List = (List)malloc(sizeof(Node));
Mix_List->Next = NULL;
Temp = Mix_List;
while(L->Next!=NULL||P->Next!=NULL)
{
if(L->Next == NULL||P->Next ==NULL)
{
Non_NULL = L->Next!=NULL?L:P;
//处理为NULL
while(Non_NULL->Next!=NULL){
Temp->Next = (List)malloc(sizeof(Node));
Temp = Temp->Next;
Temp->Element = Non_NULL->Next->Element;
Non_NULL = Non_NULL->Next;
}
break;
}
if (L->Next->Element == P->Next->Element)
{
//处理相同元素
Temp->Next = (List)malloc(sizeof(Node));
Temp = Temp->Next;
Temp->Element = L->Next->Element;
L = L->Next;
P = P->Next;
continue;
}
else
{
//处理情况2
//获得较大者
big = L->Next->Element;
small = P->Next->Element;
Temp->Next = (List)malloc(sizeof(Node));
Temp = Temp->Next;
Temp->Element = big>small?big:small;
Temp->Next = (List)malloc(sizeof(Node));
Temp = Temp->Next;
Temp->Element = big<small?big:small;
L = L->Next;
P = P->Next;
}
}
Temp->Next = NULL;
return Mix_List;
}
List Reverse(List L)
{
List Previous = NULL;
List Current = L->Next;
List Next = Current->Next;
while(Next != NULL)
{
//单步反转链表
Current->Next = Previous;
Previous = Current;
Current = Next;
Next = Next->Next;
}
Current->Next = Previous;
L->Next = Current;//表头指向第一个元素
return L;
}