将链表拆分为半C编程

时间:2015-10-31 14:02:02

标签: c math linked-list pseudocode

尝试将链表拆分为一半时,我遇到了一些问题。让我们说例如我的链表是2,3,5,6,7。第一个拆分链表应该包含2,3,5,第二个应该是6,7。

我实际上还没有提供代码,因为我仍然需要在伪代码中提供一些帮助。

int check = size%2
if even
  int half = size/2
  while(ctrFront < half)
    front.insertNode; ctrFront++; update head pointer;
  while(ctrBack < half)
    back.insertNode; ctrBack++; update head pointer;
if odd
  int half = size/2 round up
  while(ctrFront < half + 1)
    front.insertNode; ctrFront++; update head pointer;
  while(ctrBack < half)
    back.insertNode; ctrBack++; update head pointer;

我不确定这是否是正确的方法,因为逻辑似乎有点不对。任何指南?

提前致谢。

1 个答案:

答案 0 :(得分:0)

构建两个列表。弹出源列表直到其为空,将每个项目交替推送到新列表。使用其中一个新列表重新安装源列表的头指针。

在那里,很容易:

linkedList *newList1=NULL;
linkedList *newList2=NULL;

while(true){
  node *temp;
  node=listPop(&sourceList);
  if(temp==NULL) break;
  listPush(&newList1,temp);
  temp=listPop(&sourceList);
  if(temp==NULL) break;
  listPush(&newList2,temp);
};