鍊錶 鍊錶翻轉,合併,以及倒數第k個數

2021-08-28 02:46:01 字數 1736 閱讀 7801

1. **中指明了鍊錶的定義,以及初始化,初始化使用尾插法實現。

2. 鍊錶的翻轉採用三種方式,分別是遞迴,棧,以及對鍊錶逆序後,再輸出

**如下:

#include #includeusing namespace std;

typedef struct nodenode;

//尾部新增

node* tailadd(node* head, int e)else if(head ->next == null)else

p->next = t;

}return head;

}//順序輸出

void print(node* head)

coutcout}

}//棧,實現逆序

void reverseprint(node* head)

while(!s.empty())

coutnode* p1 = head; //p1儲存翻轉後的鍊錶

node* p2 = head->next; //p2儲存原始鍊錶

node* p3 = null; //臨時儲存結點

head->next = null; //phead的第乙個結點是尾結點,尾結點下乙個結點是null;

while(p2!=null)

head = p1; //把p1賦值給頭結點head。

return head;

}int main()

print(head); //順序輸出鍊錶

dg(head); //翻轉遞迴輸出

reverseprint(head); //棧翻轉輸出

head = revers(head); //先將鍊錶逆序返回

print(head); //再把逆序的鍊錶輸出

return 0;

}

node* merge(node* phead1, node* phead2)

else if(phead1==null)else if(phead2 == null)elseelse

phead1 = p;

while(p1!=null && p2!=null)else

}if(p1!=null)else if(p2!=null)else

return phead1;

}}

有兩種方法:

1. 先遍歷鍊錶,算出鍊錶結點數count,第二次直接遍歷到第count-k個結點。但是要注意,可能鍊錶結點數cout小於k,此時要返回null。這一條件要先判斷。

**:

node* findkthtotail(node* plisthead, unsigned int k) else

}node* r =new node;

r = null;

if(countnext;

}r = p;

return r;

}}

2. 可以用兩個指標,第乙個指標遍歷到第k個結點的時候,第二個指標再走到第乙個結點,兩個指標之間始終保持k-1的距離,當第乙個指標的next==null,第二個指標對應的位置,就是倒數第k個結點。

node* findkthtotail(node* plisthead, unsigned int k) else

first = first->next;

}if(count}

}

鍊錶倒數第k個節點

兩個指標一前一後,相距k即可。include include using namespace std struct linknode typedef linknode linklist void insertlist linklist list int data else linknode rese...

鍊錶 倒數第k個節點

問題 刪除倒數第k個節點 鏈結 雙指標法,開始時p1,p2都指向頭節點,先讓p2走k步,然後p1和p2一起走,當p2指向null時,p1就指向倒數第k個節點了 definition for singly linked list.struct listnode class solution retur...

鍊錶2 鍊錶中倒數第k個結點

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。k從1開始 思路 所謂輸入乙個鍊錶是指輸入乙個頭結點這個輸入的結點必然是含有next指標的物件,於是之後的多個結點相互連線形成乙個鍊錶。倒數第k個結點,也就正數第k n 1個結點,只需要遍歷鍊錶,返回第k n 1個結點即可 但是此時由於n是不知道的,為...